df27be161b
- 升级成功(CRC32校验通过)后AppFlag置APP_BOOT_UPGRADE_FLAG(0x5A5A55A5),每次升级均置位 - 启动判断放行该标记: 升级完成后直接启动App,不再停留在BL_IDLE - 擦除动作由App初始化完成: 检测标记后擦除外部SPI Flash参数分区(扇区0~1,非全片擦除,历史日志保留),随后恢复APP_START_FLAG并加载默认参数 - 目的: 防止固件升级后参数结构体布局变化导致字段错位(曾引发注册表乱码/传感器无法注册) - main.h统一UTF-8编码,新增APP_BOOT_UPGRADE_FLAG定义(与App侧bsp.h保持一致) - bsp.h配置更新: 网关编号0x0003,服务器端口8083
238 lines
8.9 KiB
C
238 lines
8.9 KiB
C
#ifndef __BSP_H
|
||
#define __BSP_H
|
||
|
||
#include <stdint.h>
|
||
#include <stdbool.h>
|
||
#include <stdio.h>
|
||
#include <string.h>
|
||
#include "hc32_ddl.h"
|
||
|
||
/*版本信息枚举 - 对应Mac[0]的Bit[6:0], Bit[7]固定为1*/
|
||
typedef enum {
|
||
GATEWAY_VER1_0 = 0x01, //网关Ver1.0
|
||
GATEWAY_VER2_0 = 0x02, //网关Ver2.0
|
||
}GATEWAY_VER_M;
|
||
|
||
/*项目编号枚举 - 对应Mac[1:3](3字节)*/
|
||
typedef enum {
|
||
GATEWAY_PRJ_TEST = 0, //测试项目
|
||
GATEWAY_PRJ_AKY, //安科院项目
|
||
GATEWAY_PRJ_BJTU, //北交大项目
|
||
GATEWAY_PRJ_BALADIAN, //巴拉水电边坡监测项目
|
||
GATEWAY_PRJ_TYY1, //铁一院川藏铁路隧道监测项目
|
||
GATEWAY_PRJ_TYY2, //铁二院川藏铁路隧道监测项目
|
||
GATEWAY_PRJ_YAXIA, //雅下项目
|
||
GATEWAY_PRJ_OTHER, //…………
|
||
}GATEWAY_PRJ_M;
|
||
|
||
/*通道枚举 - 与GateWay APP一致*/
|
||
typedef enum {
|
||
CH_NULL = -1,
|
||
CH_DBG = 0,
|
||
CH_RS485_1,
|
||
CH_RS485_2,
|
||
CH_ETH,
|
||
CH_LORA,
|
||
CH_CAT1,
|
||
}Channel_m;
|
||
|
||
/*Lora频率:470100000ul + 500000*N,N=0~45,共46个信道(470.1MHz~492.6MHz),用于配置Lora频率更方便*/
|
||
typedef enum {
|
||
CH0 = (470100000ul + 0), //470.1MHz
|
||
CH1 = (470100000ul + 500000),
|
||
CH2 = (470100000ul + 1000000),
|
||
CH3 = (470100000ul + 1500000),
|
||
CH4 = (470100000ul + 2000000),
|
||
CH5 = (470100000ul + 2500000),
|
||
CH6 = (470100000ul + 3000000),
|
||
CH7 = (470100000ul + 3500000),
|
||
CH8 = (470100000ul + 4000000),
|
||
CH9 = (470100000ul + 4500000),
|
||
CH10 = (470100000ul + 5000000),
|
||
CH11 = (470100000ul + 5500000),
|
||
CH12 = (470100000ul + 6000000),
|
||
CH13 = (470100000ul + 6500000),
|
||
CH14 = (470100000ul + 7000000),
|
||
CH15 = (470100000ul + 7500000),
|
||
CH16 = (470100000ul + 8000000),
|
||
CH17 = (470100000ul + 8500000),
|
||
CH18 = (470100000ul + 9000000),
|
||
CH19 = (470100000ul + 9500000),
|
||
CH20 = (470100000ul + 10000000),
|
||
CH21 = (470100000ul + 10500000),
|
||
CH22 = (470100000ul + 11000000),
|
||
CH23 = (470100000ul + 11500000),
|
||
CH24 = (470100000ul + 12000000),
|
||
CH25 = (470100000ul + 12500000),
|
||
CH26 = (470100000ul + 13000000),
|
||
CH27 = (470100000ul + 13500000),
|
||
CH28 = (470100000ul + 14000000),
|
||
CH29 = (470100000ul + 14500000),
|
||
CH30 = (470100000ul + 15000000),
|
||
CH31 = (470100000ul + 15500000),
|
||
CH32 = (470100000ul + 16000000),
|
||
CH33 = (470100000ul + 16500000),
|
||
CH34 = (470100000ul + 17000000),
|
||
CH35 = (470100000ul + 17500000),
|
||
CH36 = (470100000ul + 18000000),
|
||
CH37 = (470100000ul + 18500000),
|
||
CH38 = (470100000ul + 19000000),
|
||
CH39 = (470100000ul + 19500000),
|
||
CH40 = (470100000ul + 20000000),
|
||
CH41 = (470100000ul + 20500000),
|
||
CH42 = (470100000ul + 21000000),
|
||
CH43 = (470100000ul + 21500000),
|
||
CH44 = (470100000ul + 22000000),
|
||
CH45 = (470100000ul + 22500000), //492.6MHz
|
||
}LORA_FREQ_M;
|
||
/*通讯单元通道掩码 - 与GateWay APP一致*/
|
||
#define CUCH_CH1 (1 << CH_RS485_1)
|
||
#define CUCH_CH2 (1 << CH_RS485_2)
|
||
#define CUCH_ETH (1 << CH_ETH)
|
||
#define CUCH_LORA (1 << CH_LORA)
|
||
#define CUCH_CAT1 (1 << CH_CAT1)
|
||
|
||
/*****************************************************************************************/
|
||
/*********************************下载前必须检查配置项************************************/
|
||
/*当前设备版本/项目选择*/
|
||
#define GATEWAY_VER_INFO GATEWAY_VER1_0 //版本信息
|
||
#define GATEWAY_PRJ_NUM GATEWAY_PRJ_YAXIA //项目编号
|
||
#define GATEWAY_GW_NUM 0x0003 //网关编号(2字节, 1~65535)
|
||
|
||
/*CAT1服务器/Lora配置 - 替代原MAC_ADDR_TYPE编译宏, 在Boot中直接配置*/
|
||
#define GATEWAY_SVR_ADDR0 39 //服务器IP[0]
|
||
#define GATEWAY_SVR_ADDR1 106 //服务器IP[1]
|
||
#define GATEWAY_SVR_ADDR2 103 //服务器IP[2]
|
||
#define GATEWAY_SVR_ADDR3 147 //服务器IP[3]
|
||
#define GATEWAY_SVR_PORT 8083 //服务器端口
|
||
|
||
#define GATEWAY_LORA_FREQ CH0 //Lora中心频率(可配置为CH0~CH45)
|
||
|
||
/*默认通道配置 - 在Boot中直接配置, 替代原APP硬编码默认值*/
|
||
#define GATEWAY_MUCH CH_ETH //主上传通道
|
||
#define GATEWAY_AUCH CH_NULL //辅助上传通道
|
||
#define GATEWAY_DUCH CH_CAT1 //调试/升级通道
|
||
#define GATEWAY_CUCH_MASK CUCH_LORA //通讯单元通道掩码
|
||
/*********************************下载前必须检查配置项************************************/
|
||
/*****************************************************************************************/
|
||
|
||
/*Flash分区 - 32KB Boot + APP(0x8000起) + 参数区(0x7C000)*/
|
||
#define FLASH_SECTOR_SIZE 0x2000ul //8KB
|
||
#define FLASH_BASE ((uint32_t)0x00000000)
|
||
#define FLASH_SIZE (64u * FLASH_SECTOR_SIZE) //512KB
|
||
|
||
#define SRAM_BASE ((uint32_t)0x1FFF8000)
|
||
#define SRAM_SIZE 0x2F000ul //192KB
|
||
|
||
#define BOOT_SIZE (4 * FLASH_SECTOR_SIZE) //32KB
|
||
#define APP_ADDRESS (FLASH_BASE + BOOT_SIZE) //0x8000
|
||
#define APP_SIZE (58 * FLASH_SECTOR_SIZE) //464KB
|
||
#define BOOT_PARA_ADDRESS (APP_ADDRESS + APP_SIZE) //0x7C000
|
||
#define BOOT_PARA_SIZE (FLASH_SECTOR_SIZE)
|
||
|
||
#define DEBUG 1
|
||
#define USE_SD_CARD 0
|
||
#define WATCH_DOG 1
|
||
|
||
//DEBUG USART1
|
||
#define DBGUART_IRQn Int006_IRQn
|
||
#define DBGUART_EI_IRQn Int007_IRQn
|
||
#define DBG_USART_CH (M4_USART1)
|
||
#define DBG_USART_RX_PORT (PortA)
|
||
#define DBG_USART_RX_PIN (Pin11)
|
||
#define DBG_USART_TX_PORT (PortA)
|
||
#define DBG_USART_TX_PIN (Pin12)
|
||
#define DBG_USART_RX_FUNC (Func_Usart1_Rx)
|
||
#define DBG_USART_TX_FUNC (Func_Usart1_Tx)
|
||
#define DBG_USART_RI_NUM (INT_USART1_RI)
|
||
#define DBG_USART_EI_NUM (INT_USART1_EI)
|
||
#define DBG_FCG1_PERIPH (PWC_FCG1_PERIPH_USART1)
|
||
|
||
//RS485 Ch1 USART2 - 升级通道
|
||
#define RS485_CH1_USART_CH (M4_USART2)
|
||
#define RS485_CH1_USART_RX_PORT (PortA)
|
||
#define RS485_CH1_USART_RX_PIN (Pin10)
|
||
#define RS485_CH1_USART_TX_PORT (PortA)
|
||
#define RS485_CH1_USART_TX_PIN (Pin08)
|
||
#define RS485_CH1_USART_RX_FUNC (Func_Usart2_Rx)
|
||
#define RS485_CH1_USART_TX_FUNC (Func_Usart2_Tx)
|
||
#define RS485_CH1_USART_RI_NUM (INT_USART2_RI)
|
||
#define RS485_CH1_USART_EI_NUM (INT_USART2_EI)
|
||
#define RS485_CH1_FCG1_PERIPH (PWC_FCG1_PERIPH_USART2)
|
||
#define RS485CH1_UART_IRQn Int012_IRQn
|
||
#define RS485CH1_UART_EI_IRQn Int011_IRQn
|
||
|
||
#define RS485_CH1_CTRL_PORT (PortC)
|
||
#define RS485_CH1_CTRL_PIN (Pin07)
|
||
#define RS485_CH1_TX() PORT_SetBits(RS485_CH1_CTRL_PORT, RS485_CH1_CTRL_PIN)
|
||
#define RS485_CH1_RX() PORT_ResetBits(RS485_CH1_CTRL_PORT, RS485_CH1_CTRL_PIN)
|
||
|
||
//RS485 Ch2 USART3
|
||
#define RS485_CH2_USART_CH (M4_USART3)
|
||
#define RS485_CH2_USART_RX_PORT (PortB)
|
||
#define RS485_CH2_USART_RX_PIN (Pin14)
|
||
#define RS485_CH2_USART_TX_PORT (PortB)
|
||
#define RS485_CH2_USART_TX_PIN (Pin12)
|
||
#define RS485_CH2_USART_RX_FUNC (Func_Usart3_Rx)
|
||
#define RS485_CH2_USART_TX_FUNC (Func_Usart3_Tx)
|
||
#define RS485_CH2_USART_RI_NUM (INT_USART3_RI)
|
||
#define RS485_CH2_USART_EI_NUM (INT_USART3_EI)
|
||
#define RS485_CH2_FCG1_PERIPH (PWC_FCG1_PERIPH_USART3)
|
||
#define RS485CH2_UART_IRQn Int002_IRQn
|
||
#define RS485CH2_UART_EI_IRQn Int003_IRQn
|
||
|
||
#define RS485_CH2_CTRL_PORT (PortB)
|
||
#define RS485_CH2_CTRL_PIN (Pin13)
|
||
#define RS485_CH2_TX() PORT_SetBits(RS485_CH2_CTRL_PORT, RS485_CH2_CTRL_PIN)
|
||
#define RS485_CH2_RX() PORT_ResetBits(RS485_CH2_CTRL_PORT, RS485_CH2_CTRL_PIN)
|
||
|
||
/*BootLoader参数结构体 - 与GateWay APP一致*/
|
||
typedef struct {
|
||
uint32_t AppFlag; //应用启动标志
|
||
uint32_t UpdateFlag; //升级标志
|
||
uint32_t PackageCnt; //数据包总数
|
||
uint32_t AppSize; //应用程序大小
|
||
uint32_t Crc32Check; //CRC32校验值
|
||
uint32_t FirstRunFlag; //首次运行标志
|
||
uint8_t GwMac[6]; //网关MAC地址
|
||
uint8_t SvrAddr[4]; //默认服务器IP地址
|
||
uint16_t SvrPort; //默认服务器端口
|
||
uint32_t LoraFreq; //默认Lora中心频率
|
||
int8_t Much; //主上传通道
|
||
int8_t Auch; //辅助上传通道
|
||
int8_t Duch; //调试/升级通道
|
||
uint8_t CuchMask; //通讯单元通道掩码
|
||
}BootPara_t, *BootPara;
|
||
|
||
/*BSP初始化*/
|
||
void BSP_Init(void);
|
||
|
||
/*调试串口*/
|
||
void DbgUart_Config(uint32_t BaudRate);
|
||
void DebugUartSend(uint8_t *sData, uint16_t sLen);
|
||
void DbgRxIrqCallback(uint8_t rData);
|
||
|
||
/*RS485 Ch1 - 升级通道*/
|
||
void RS485Ch1_Config(uint32_t BaudRate);
|
||
void RS485Ch1UartSend(uint8_t *sData, uint16_t sLen);
|
||
uint8_t RS485Ch1UartRec(void);
|
||
void RS485Ch1RxIrqCallback(uint8_t rData);
|
||
|
||
/*RS485 Ch2*/
|
||
void RS485Ch2_Config(uint32_t BaudRate);
|
||
void RS485Ch2UartSend(uint8_t *sData, uint16_t sLen);
|
||
void RS485Ch2RxIrqCallback(uint8_t rData);
|
||
|
||
/*看门狗*/
|
||
void FeedDog(void);
|
||
void Error_Handler(void);
|
||
|
||
/*Flash操作*/
|
||
void FlashWrite(uint32_t Addr, uint32_t *wData, uint8_t wLen);
|
||
void ReadBootPara(BootPara rData);
|
||
void WriteBootPara(BootPara wData);
|
||
void EraseFlash(void);
|
||
|
||
#endif
|
||
|