wifi function is ok but memory is not sufficient
This commit is contained in:
parent
e445da8862
commit
e859d12a77
|
@ -21,91 +21,91 @@
|
||||||
uint8_t hmi_buf[4][APP_HMI_BUF_SIZE] __attribute__((section(".CCM_RAM")));
|
uint8_t hmi_buf[4][APP_HMI_BUF_SIZE] __attribute__((section(".CCM_RAM")));
|
||||||
|
|
||||||
/************************************************ETH接口***************************************************/
|
/************************************************ETH接口***************************************************/
|
||||||
static void w5500_rcv_call(uint8_t socket, uint8_t *buf, uint16_t len);
|
//static void w5500_rcv_call(uint8_t socket, uint8_t *buf, uint16_t len);
|
||||||
|
|
||||||
ModbusItem w5500_modbus_tcp_array[W5500_MODBUS_NUM];
|
//ModbusItem w5500_modbus_tcp_array[W5500_MODBUS_NUM];
|
||||||
W5500_STATIC_INIT(w5500, kSpiDev_3, kGpioType_W5500Cs, w5500_rcv_call);
|
//W5500_STATIC_INIT(w5500, kSpiDev_3, kGpioType_W5500Cs, w5500_rcv_call);
|
||||||
|
|
||||||
static void eth_ctrl_rx_int(uint8_t comm_dev, bool is_en)
|
static void eth_ctrl_rx_int(uint8_t comm_dev, bool is_en)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool w5500_tcp_send(uint8_t comm_dev, uint8_t *buf, int32_t len)
|
//static bool w5500_tcp_send(uint8_t comm_dev, uint8_t *buf, int32_t len)
|
||||||
{
|
//{
|
||||||
uint32_t cnt;
|
// uint32_t cnt;
|
||||||
bool res = false;
|
// bool res = false;
|
||||||
uint16_t addr, tmp;
|
// uint16_t addr, tmp;
|
||||||
uint8_t rcv_buf[2], socket_reg;
|
// uint8_t rcv_buf[2], socket_reg;
|
||||||
|
|
||||||
if (comm_dev < 8)
|
// if (comm_dev < 8)
|
||||||
{
|
// {
|
||||||
tmp = cnt = 0;
|
// tmp = cnt = 0;
|
||||||
socket_reg = W5500_CREAT_SOCKET_REG(comm_dev);
|
// socket_reg = W5500_CREAT_SOCKET_REG(comm_dev);
|
||||||
while (cnt++ < 10)
|
// while (cnt++ < 10)
|
||||||
{
|
// {
|
||||||
drv_w5500_read_socket_reg(&w5500, socket_reg, Sn_TX_FSR_0x20, rcv_buf, 2);
|
// drv_w5500_read_socket_reg(&w5500, socket_reg, Sn_TX_FSR_0x20, rcv_buf, 2);
|
||||||
tmp = READ_BT_INT16U_BY_CONST_POS(rcv_buf, 0);
|
// tmp = READ_BT_INT16U_BY_CONST_POS(rcv_buf, 0);
|
||||||
if (len < tmp)
|
// if (len < tmp)
|
||||||
{
|
// {
|
||||||
drv_w5500_read_socket_reg(&w5500, socket_reg, Sn_TX_WR_0x24, rcv_buf, 2);
|
// drv_w5500_read_socket_reg(&w5500, socket_reg, Sn_TX_WR_0x24, rcv_buf, 2);
|
||||||
addr = READ_BT_INT16U_BY_CONST_POS(rcv_buf, 0);
|
// addr = READ_BT_INT16U_BY_CONST_POS(rcv_buf, 0);
|
||||||
|
|
||||||
drv_w5500_dma_write_socket_reg(&w5500, W5500_CREAT_SOCKET_WRITE_BUF(comm_dev), addr, buf, len);
|
// drv_w5500_dma_write_socket_reg(&w5500, W5500_CREAT_SOCKET_WRITE_BUF(comm_dev), addr, buf, len);
|
||||||
addr += len;
|
// addr += len;
|
||||||
WRITE_BT_INT16U_BY_CONST_POS(rcv_buf, 0, addr);
|
// WRITE_BT_INT16U_BY_CONST_POS(rcv_buf, 0, addr);
|
||||||
drv_w5500_write_socket_reg(&w5500, socket_reg, Sn_TX_WR_0x24, rcv_buf, 2);
|
// drv_w5500_write_socket_reg(&w5500, socket_reg, Sn_TX_WR_0x24, rcv_buf, 2);
|
||||||
|
|
||||||
rcv_buf[0] = SOCKET_CMD_SEND;
|
// rcv_buf[0] = SOCKET_CMD_SEND;
|
||||||
drv_w5500_write_socket_reg(&w5500, socket_reg, Sn_CR_0x01, rcv_buf, 1);
|
// drv_w5500_write_socket_reg(&w5500, socket_reg, Sn_CR_0x01, rcv_buf, 1);
|
||||||
res = true;
|
// res = true;
|
||||||
break;
|
// break;
|
||||||
}
|
// }
|
||||||
kit_time_dly_ms(1);
|
// kit_time_dly_ms(1);
|
||||||
}
|
// }
|
||||||
}
|
// }
|
||||||
return res;
|
// return res;
|
||||||
}
|
//}
|
||||||
|
|
||||||
bool w5500_tcp_close(uint8_t socket)
|
//bool w5500_tcp_close(uint8_t socket)
|
||||||
{
|
//{
|
||||||
bool res = false;
|
// bool res = false;
|
||||||
if (socket < W5500_MODBUS_NUM)
|
// if (socket < W5500_MODBUS_NUM)
|
||||||
{
|
// {
|
||||||
res = drv_w5500_close_socket(&w5500, socket);
|
// res = drv_w5500_close_socket(&w5500, socket);
|
||||||
}
|
// }
|
||||||
return res;
|
// return res;
|
||||||
}
|
//}
|
||||||
|
|
||||||
void w5500_tcp_close_call(uint8_t socket)
|
//void w5500_tcp_close_call(uint8_t socket)
|
||||||
{
|
//{
|
||||||
if (socket < W5500_MODBUS_NUM)
|
// if (socket < W5500_MODBUS_NUM)
|
||||||
{
|
// {
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|
||||||
void w5500_rcv_call(uint8_t socket, uint8_t *buf, uint16_t len)
|
//void w5500_rcv_call(uint8_t socket, uint8_t *buf, uint16_t len)
|
||||||
{
|
//{
|
||||||
bsp_modbus_push_data(&w5500_modbus_tcp_array[socket], buf, len);
|
// bsp_modbus_push_data(&w5500_modbus_tcp_array[socket], buf, len);
|
||||||
}
|
//}
|
||||||
|
|
||||||
void bms_poll_w5500(void)
|
//void bms_poll_w5500(void)
|
||||||
{
|
//{
|
||||||
drv_w5500_poll(&w5500);
|
// drv_w5500_poll(&w5500);
|
||||||
}
|
//}
|
||||||
|
|
||||||
#define STM32_ID_ADDR 0x1FFF7A10
|
#define STM32_ID_ADDR 0x1FFF7A10
|
||||||
|
|
||||||
void bms_w5500_net_protocol(void)
|
//void bms_w5500_net_protocol(void)
|
||||||
{
|
//{
|
||||||
uint8_t mac_buf[6];
|
// uint8_t mac_buf[6];
|
||||||
uint16_t port, *port_array;
|
// uint16_t port, *port_array;
|
||||||
uint32_t ip, len, addr, net_mask, gateway_ip;
|
// uint32_t ip, len, addr, net_mask, gateway_ip;
|
||||||
|
|
||||||
ip = get_eeprom_data(kEEData_Eth1IPAddr2_1, kEepromDataType_Double);
|
// ip = get_eeprom_data(kEEData_Eth1IPAddr2_1, kEepromDataType_Double);
|
||||||
net_mask = get_eeprom_data(kEEData_Eth1Mask2_1, kEepromDataType_Double);
|
// net_mask = get_eeprom_data(kEEData_Eth1Mask2_1, kEepromDataType_Double);
|
||||||
gateway_ip = get_eeprom_data(kEEData_Eth1Gate1Addr2_1, kEepromDataType_Double);
|
// gateway_ip = get_eeprom_data(kEEData_Eth1Gate1Addr2_1, kEepromDataType_Double);
|
||||||
drv_w5500_init(&w5500, ip, port_array, gateway_ip, net_mask, (uint8_t *)(STM32_ID_ADDR + 4), 40000);
|
// drv_w5500_init(&w5500, ip, port_array, gateway_ip, net_mask, (uint8_t *)(STM32_ID_ADDR + 4), 40000);
|
||||||
}
|
//}
|
||||||
|
|
||||||
/**************************************************CAN接口**************************************************/
|
/**************************************************CAN接口**************************************************/
|
||||||
QUEUE_STATIC_INIT_CCM(inter_can_queue, 50, sizeof(CanMsg));
|
QUEUE_STATIC_INIT_CCM(inter_can_queue, 50, sizeof(CanMsg));
|
||||||
|
@ -283,7 +283,7 @@ void bms_init_comm(void)
|
||||||
bsp_eeprom_set_data(kEep_Inter485Parity_Baudrate, 1, kEepromDataType_Low);
|
bsp_eeprom_set_data(kEep_Inter485Parity_Baudrate, 1, kEepromDataType_Low);
|
||||||
bsp_eeprom_set_data(kEep_Exter485_2Parity_Baudrate, 1, kEepromDataType_Low);
|
bsp_eeprom_set_data(kEep_Exter485_2Parity_Baudrate, 1, kEepromDataType_Low);
|
||||||
|
|
||||||
for (i = 0; i < BMS_485_CHANNEL; i++)
|
for (i = 1; i < BMS_485_CHANNEL; i++)
|
||||||
{
|
{
|
||||||
tmp = get_eeprom_data(kEep_Inter485Parity_Baudrate + i, kEepromDataType_Low);
|
tmp = get_eeprom_data(kEep_Inter485Parity_Baudrate + i, kEepromDataType_Low);
|
||||||
if (tmp >= kR485BaudRateEnd)
|
if (tmp >= kR485BaudRateEnd)
|
||||||
|
@ -315,21 +315,21 @@ void bms_init_comm(void)
|
||||||
drv_can_set_interrupt(EXTER_CAN_PORT, kcan_interrupt_e_Rx, APP_CFG_INT_PRIO_CAN2_RX, exter_can_rx_it_call);
|
drv_can_set_interrupt(EXTER_CAN_PORT, kcan_interrupt_e_Rx, APP_CFG_INT_PRIO_CAN2_RX, exter_can_rx_it_call);
|
||||||
drv_can_set_interrupt(EXTER_CAN_PORT, kcan_interrupt_e_Tx, APP_CFG_INT_PRIO_CAN2_TX, exter_can_tx_it_call);
|
drv_can_set_interrupt(EXTER_CAN_PORT, kcan_interrupt_e_Tx, APP_CFG_INT_PRIO_CAN2_TX, exter_can_tx_it_call);
|
||||||
|
|
||||||
for (i = 0; i < W5500_MODBUS_NUM; i++)
|
// for (i = 0; i < W5500_MODBUS_NUM; i++)
|
||||||
{
|
// {
|
||||||
w5500_modbus_tcp_array[i].type = kModbusType_TCP;
|
// w5500_modbus_tcp_array[i].type = kModbusType_TCP;
|
||||||
w5500_modbus_tcp_array[i].comm_dev = i;
|
// w5500_modbus_tcp_array[i].comm_dev = i;
|
||||||
w5500_modbus_tcp_array[i].start_addr = 0xFFFF;
|
// w5500_modbus_tcp_array[i].start_addr = 0xFFFF;
|
||||||
w5500_modbus_tcp_array[i].send_call = w5500_tcp_send;
|
// w5500_modbus_tcp_array[i].send_call = w5500_tcp_send;
|
||||||
w5500_modbus_tcp_array[i].buf_size = MODBUS_BUF_SIZE;
|
// w5500_modbus_tcp_array[i].buf_size = MODBUS_BUF_SIZE;
|
||||||
w5500_modbus_tcp_array[i].ctrl_rx_int_call = eth_ctrl_rx_int;
|
// w5500_modbus_tcp_array[i].ctrl_rx_int_call = eth_ctrl_rx_int;
|
||||||
};
|
// };
|
||||||
drv_w5500_set_close_call(&w5500, w5500_tcp_close_call);
|
// drv_w5500_set_close_call(&w5500, w5500_tcp_close_call);
|
||||||
drv_spi_init(kSpiDev_3, kSpiFreq_Div2, kSpiMode_C0E0, SpiFrame_MSBFirst, kGpioType_W5500Clk, kGpioType_W5500Miso, kGpioType_W5500Mosi);
|
// drv_spi_init(kSpiDev_3, kSpiFreq_Div2, kSpiMode_C0E0, SpiFrame_MSBFirst, kGpioType_W5500Clk, kGpioType_W5500Miso, kGpioType_W5500Mosi);
|
||||||
// drv_spi_set_dma(kSpiDev_3, true, true);
|
// drv_spi_set_dma(kSpiDev_3, true, true);
|
||||||
|
|
||||||
drv_gpio_set_pin_status(kGpioType_W5500Rst, kGpioStatus_Low);
|
// drv_gpio_set_pin_status(kGpioType_W5500Rst, kGpioStatus_Low);
|
||||||
kit_time_dly_ms(500);
|
// kit_time_dly_ms(500);
|
||||||
drv_gpio_set_pin_status(kGpioType_W5500Rst, kGpioStatus_High);
|
// drv_gpio_set_pin_status(kGpioType_W5500Rst, kGpioStatus_High);
|
||||||
kit_time_dly_ms(1500);
|
// kit_time_dly_ms(1500);
|
||||||
}
|
}
|
||||||
|
|
|
@ -48,8 +48,8 @@ uint32_t hmi_fill_modbus_cfg(uint8_t *buf);
|
||||||
uint16_t hmi_write_modbus_cfg(uint16_t offset_addr, uint16_t data);
|
uint16_t hmi_write_modbus_cfg(uint16_t offset_addr, uint16_t data);
|
||||||
|
|
||||||
|
|
||||||
void bms_poll_w5500(void);
|
//void bms_poll_w5500(void);
|
||||||
void bms_w5500_net_protocol(void);
|
//void bms_w5500_net_protocol(void);
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -50,8 +50,8 @@ const GpioArray io_array[kGpioType_End] =
|
||||||
kGpioMode_Comm_Rx, kGpioStatus_Low, GPIO_PORT_PIN(kGpioPort_A, 1), kGpioPort_A, kGpioPin_1, //rs485A Rx(mcu uart4)
|
kGpioMode_Comm_Rx, kGpioStatus_Low, GPIO_PORT_PIN(kGpioPort_A, 1), kGpioPort_A, kGpioPin_1, //rs485A Rx(mcu uart4)
|
||||||
kGpioMode_Comm_Tx, kGpioStatus_Low, GPIO_PORT_PIN(kGpioPort_A, 0), kGpioPort_A, kGpioPin_0, //rs485A Tx(mcu uart4)
|
kGpioMode_Comm_Tx, kGpioStatus_Low, GPIO_PORT_PIN(kGpioPort_A, 0), kGpioPort_A, kGpioPin_0, //rs485A Tx(mcu uart4)
|
||||||
|
|
||||||
kGpioMode_Comm_Rx, kGpioStatus_Low, GPIO_PORT_PIN(kGpioPort_A, 2), kGpioPort_A, kGpioPin_2, //Sim卡/wifi/ble Rx(mcu uart2)
|
kGpioMode_Comm_Rx, kGpioStatus_Low, GPIO_PORT_PIN(kGpioPort_A, 3), kGpioPort_A, kGpioPin_3, //Sim卡/wifi/ble Rx(mcu uart2)
|
||||||
kGpioMode_Comm_Tx, kGpioStatus_Low, GPIO_PORT_PIN(kGpioPort_A, 3), kGpioPort_A, kGpioPin_3, //Sim卡/wifi/ble Tx(mcu uart2)
|
kGpioMode_Comm_Tx, kGpioStatus_Low, GPIO_PORT_PIN(kGpioPort_A, 2), kGpioPort_A, kGpioPin_2, //Sim卡/wifi/ble Tx(mcu uart2)
|
||||||
|
|
||||||
/*CAN枚举*/
|
/*CAN枚举*/
|
||||||
kGpioMode_Comm_Rx, kGpioStatus_Low, GPIO_PORT_PIN(kGpioPort_A, 11), kGpioPort_A, kGpioPin_11, //can1 rx
|
kGpioMode_Comm_Rx, kGpioStatus_Low, GPIO_PORT_PIN(kGpioPort_A, 11), kGpioPort_A, kGpioPin_11, //can1 rx
|
||||||
|
@ -84,12 +84,12 @@ const GpioArray io_array[kGpioType_End] =
|
||||||
kGpioMode_Output_PP, kGpioStatus_High, GPIO_PORT_PIN(kGpioPort_B, 11), kGpioPort_B, kGpioPin_11, //ADC_CS SPI2通讯信号
|
kGpioMode_Output_PP, kGpioStatus_High, GPIO_PORT_PIN(kGpioPort_B, 11), kGpioPort_B, kGpioPin_11, //ADC_CS SPI2通讯信号
|
||||||
|
|
||||||
/*网口*/
|
/*网口*/
|
||||||
kGpioMode_Comm_Tx, kGpioStatus_High, GPIO_PORT_PIN(kGpioPort_B, 5), kGpioPort_B, kGpioPin_5, //W5500_MOSI
|
// kGpioMode_Comm_Tx, kGpioStatus_High, GPIO_PORT_PIN(kGpioPort_B, 5), kGpioPort_B, kGpioPin_5, //W5500_MOSI
|
||||||
kGpioMode_Comm_Rx, kGpioStatus_High, GPIO_PORT_PIN(kGpioPort_B, 4), kGpioPort_B, kGpioPin_4, //W5500_MISO
|
// kGpioMode_Comm_Rx, kGpioStatus_High, GPIO_PORT_PIN(kGpioPort_B, 4), kGpioPort_B, kGpioPin_4, //W5500_MISO
|
||||||
kGpioMode_Comm_Tx, kGpioStatus_High, GPIO_PORT_PIN(kGpioPort_B, 3), kGpioPort_B, kGpioPin_3, //W5500_SCK
|
// kGpioMode_Comm_Tx, kGpioStatus_High, GPIO_PORT_PIN(kGpioPort_B, 3), kGpioPort_B, kGpioPin_3, //W5500_SCK
|
||||||
kGpioMode_Output_PP, kGpioStatus_High, GPIO_PORT_PIN(kGpioPort_A, 15), kGpioPort_A, kGpioPin_15, //W5500_CS
|
// kGpioMode_Output_PP, kGpioStatus_High, GPIO_PORT_PIN(kGpioPort_A, 15), kGpioPort_A, kGpioPin_15, //W5500_CS
|
||||||
kGpioMode_Output_PP, kGpioStatus_Low, GPIO_PORT_PIN(kGpioPort_G, 14), kGpioPort_G, kGpioPin_14, //W5500_RST
|
// kGpioMode_Output_PP, kGpioStatus_Low, GPIO_PORT_PIN(kGpioPort_G, 14), kGpioPort_G, kGpioPin_14, //W5500_RST
|
||||||
kGpioMode_Input_Floating, kGpioStatus_High, GPIO_PORT_PIN(kGpioPort_G, 15), kGpioPort_G, kGpioPin_15, //W5500_INT
|
// kGpioMode_Input_Floating, kGpioStatus_High, GPIO_PORT_PIN(kGpioPort_G, 15), kGpioPort_G, kGpioPin_15, //W5500_INT
|
||||||
};
|
};
|
||||||
|
|
||||||
void bms_init_gpio(void)
|
void bms_init_gpio(void)
|
||||||
|
|
|
@ -91,12 +91,12 @@ typedef enum
|
||||||
kGpioType_ADC_Cs,
|
kGpioType_ADC_Cs,
|
||||||
|
|
||||||
/*以太网模块*/
|
/*以太网模块*/
|
||||||
kGpioType_W5500Mosi,
|
// kGpioType_W5500Mosi,
|
||||||
kGpioType_W5500Miso,
|
// kGpioType_W5500Miso,
|
||||||
kGpioType_W5500Clk,
|
// kGpioType_W5500Clk,
|
||||||
kGpioType_W5500Cs,
|
// kGpioType_W5500Cs,
|
||||||
kGpioType_W5500Rst,
|
// kGpioType_W5500Rst,
|
||||||
kGpioType_W5500Int,
|
// kGpioType_W5500Int,
|
||||||
kGpioType_End,
|
kGpioType_End,
|
||||||
} GpioType;
|
} GpioType;
|
||||||
|
|
||||||
|
|
|
@ -21,7 +21,7 @@ bool is_first_run = false;
|
||||||
static int a = 0;
|
static int a = 0;
|
||||||
void task_1ms_handler(uint32_t base_time)
|
void task_1ms_handler(uint32_t base_time)
|
||||||
{
|
{
|
||||||
bms_poll_w5500();
|
// bms_poll_w5500();
|
||||||
}
|
}
|
||||||
|
|
||||||
void task_can1_handler(uint32_t base_time)
|
void task_can1_handler(uint32_t base_time)
|
||||||
|
@ -172,17 +172,17 @@ void poll_10ms_task_init(void)
|
||||||
bsp_create_task(&modbus_rtu_task2, (uint8_t *)"exter1_modbus");
|
bsp_create_task(&modbus_rtu_task2, (uint8_t *)"exter1_modbus");
|
||||||
bsp_create_task(&modbus_rtu_task3, (uint8_t *)"exter2_modbus");
|
bsp_create_task(&modbus_rtu_task3, (uint8_t *)"exter2_modbus");
|
||||||
|
|
||||||
bms_w5500_net_protocol();
|
// bms_w5500_net_protocol();
|
||||||
for (i = 0; i < W5500_MODBUS_NUM; i++)
|
// for (i = 0; i < W5500_MODBUS_NUM; i++)
|
||||||
{
|
// {
|
||||||
tcp_server_task[i].task_id = i + 10;
|
// tcp_server_task[i].task_id = i + 10;
|
||||||
tcp_server_task[i].stk_size = 300;
|
// tcp_server_task[i].stk_size = 300;
|
||||||
tcp_server_task[i].stk_array = tcp_server_stk[i];
|
// tcp_server_task[i].stk_array = tcp_server_stk[i];
|
||||||
tcp_server_task[i].interval = 100;
|
// tcp_server_task[i].interval = 100;
|
||||||
tcp_server_task[i].timeout = 1000;
|
// tcp_server_task[i].timeout = 1000;
|
||||||
tcp_server_task[i].handler_func = tcp_server_poll[i];
|
// tcp_server_task[i].handler_func = tcp_server_poll[i];
|
||||||
bsp_create_task(&tcp_server_task[i], (uint8_t *)&tcp_server_task_name[i][0]);
|
// bsp_create_task(&tcp_server_task[i], (uint8_t *)&tcp_server_task_name[i][0]);
|
||||||
}
|
// }
|
||||||
}
|
}
|
||||||
|
|
||||||
void poll_mqtt_init(void)
|
void poll_mqtt_init(void)
|
||||||
|
|
|
@ -10,14 +10,14 @@
|
||||||
<TargetName>stm32f407</TargetName>
|
<TargetName>stm32f407</TargetName>
|
||||||
<ToolsetNumber>0x4</ToolsetNumber>
|
<ToolsetNumber>0x4</ToolsetNumber>
|
||||||
<ToolsetName>ARM-ADS</ToolsetName>
|
<ToolsetName>ARM-ADS</ToolsetName>
|
||||||
<pArmCC>5060750::V5.06 update 6 (build 750)::ARMCC</pArmCC>
|
<pArmCC>5050106::V5.05 update 1 (build 106)::ARMCC</pArmCC>
|
||||||
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
|
<pCCUsed>5050106::V5.05 update 1 (build 106)::ARMCC</pCCUsed>
|
||||||
<uAC6>0</uAC6>
|
<uAC6>0</uAC6>
|
||||||
<TargetOption>
|
<TargetOption>
|
||||||
<TargetCommonOption>
|
<TargetCommonOption>
|
||||||
<Device>STM32F407ZGTx</Device>
|
<Device>STM32F407ZGTx</Device>
|
||||||
<Vendor>STMicroelectronics</Vendor>
|
<Vendor>STMicroelectronics</Vendor>
|
||||||
<PackID>Keil.STM32F4xx_DFP.2.14.0</PackID>
|
<PackID>Keil.STM32F4xx_DFP.2.16.0</PackID>
|
||||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||||
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
||||||
<FlashUtilSpec></FlashUtilSpec>
|
<FlashUtilSpec></FlashUtilSpec>
|
||||||
|
@ -186,6 +186,8 @@
|
||||||
<uocXRam>0</uocXRam>
|
<uocXRam>0</uocXRam>
|
||||||
<RvdsVP>2</RvdsVP>
|
<RvdsVP>2</RvdsVP>
|
||||||
<RvdsMve>0</RvdsMve>
|
<RvdsMve>0</RvdsMve>
|
||||||
|
<RvdsCdeCp>0</RvdsCdeCp>
|
||||||
|
<nBranchProt>0</nBranchProt>
|
||||||
<hadIRAM2>1</hadIRAM2>
|
<hadIRAM2>1</hadIRAM2>
|
||||||
<hadIROM2>0</hadIROM2>
|
<hadIROM2>0</hadIROM2>
|
||||||
<StupSel>8</StupSel>
|
<StupSel>8</StupSel>
|
||||||
|
@ -352,7 +354,7 @@
|
||||||
<NoWarn>0</NoWarn>
|
<NoWarn>0</NoWarn>
|
||||||
<uSurpInc>0</uSurpInc>
|
<uSurpInc>0</uSurpInc>
|
||||||
<useXO>0</useXO>
|
<useXO>0</useXO>
|
||||||
<uClangAs>0</uClangAs>
|
<ClangAsOpt>4</ClangAsOpt>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -471,7 +473,7 @@
|
||||||
<NoWarn>2</NoWarn>
|
<NoWarn>2</NoWarn>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
<useXO>2</useXO>
|
<useXO>2</useXO>
|
||||||
<uClangAs>2</uClangAs>
|
<ClangAsOpt>0</ClangAsOpt>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -880,7 +882,7 @@
|
||||||
<NoWarn>2</NoWarn>
|
<NoWarn>2</NoWarn>
|
||||||
<uSurpInc>2</uSurpInc>
|
<uSurpInc>2</uSurpInc>
|
||||||
<useXO>2</useXO>
|
<useXO>2</useXO>
|
||||||
<uClangAs>2</uClangAs>
|
<ClangAsOpt>0</ClangAsOpt>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
@ -1066,7 +1068,7 @@
|
||||||
<TargetCommonOption>
|
<TargetCommonOption>
|
||||||
<Device>STM32F407VGTx</Device>
|
<Device>STM32F407VGTx</Device>
|
||||||
<Vendor>STMicroelectronics</Vendor>
|
<Vendor>STMicroelectronics</Vendor>
|
||||||
<PackID>Keil.STM32F4xx_DFP.2.14.0</PackID>
|
<PackID>Keil.STM32F4xx_DFP.2.16.0</PackID>
|
||||||
<PackURL>http://www.keil.com/pack/</PackURL>
|
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||||
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
||||||
<FlashUtilSpec></FlashUtilSpec>
|
<FlashUtilSpec></FlashUtilSpec>
|
||||||
|
@ -1235,6 +1237,8 @@
|
||||||
<uocXRam>0</uocXRam>
|
<uocXRam>0</uocXRam>
|
||||||
<RvdsVP>2</RvdsVP>
|
<RvdsVP>2</RvdsVP>
|
||||||
<RvdsMve>0</RvdsMve>
|
<RvdsMve>0</RvdsMve>
|
||||||
|
<RvdsCdeCp>0</RvdsCdeCp>
|
||||||
|
<nBranchProt>0</nBranchProt>
|
||||||
<hadIRAM2>1</hadIRAM2>
|
<hadIRAM2>1</hadIRAM2>
|
||||||
<hadIROM2>0</hadIROM2>
|
<hadIROM2>0</hadIROM2>
|
||||||
<StupSel>8</StupSel>
|
<StupSel>8</StupSel>
|
||||||
|
@ -1401,7 +1405,7 @@
|
||||||
<NoWarn>0</NoWarn>
|
<NoWarn>0</NoWarn>
|
||||||
<uSurpInc>0</uSurpInc>
|
<uSurpInc>0</uSurpInc>
|
||||||
<useXO>0</useXO>
|
<useXO>0</useXO>
|
||||||
<uClangAs>0</uClangAs>
|
<ClangAsOpt>4</ClangAsOpt>
|
||||||
<VariousControls>
|
<VariousControls>
|
||||||
<MiscControls></MiscControls>
|
<MiscControls></MiscControls>
|
||||||
<Define></Define>
|
<Define></Define>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -38,7 +38,7 @@ typedef struct
|
||||||
|
|
||||||
extern QueueItem inter_can_queue;
|
extern QueueItem inter_can_queue;
|
||||||
extern QueueItem exter_can_queue;
|
extern QueueItem exter_can_queue;
|
||||||
extern ModbusItem w5500_modbus_tcp_array[W5500_MODBUS_NUM];
|
//extern ModbusItem w5500_modbus_tcp_array[W5500_MODBUS_NUM];
|
||||||
extern const UintArgFunCall tcp_server_poll[W5500_MODBUS_NUM];
|
extern const UintArgFunCall tcp_server_poll[W5500_MODBUS_NUM];
|
||||||
|
|
||||||
QueueItem *queue_can[kcan_dev_e_End] =
|
QueueItem *queue_can[kcan_dev_e_End] =
|
||||||
|
@ -211,77 +211,77 @@ void modbus_rtu_externII_handler(uint32_t base_time)
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef void (* UintArgCall) (uint32_t arg);
|
typedef void (* UintArgCall) (uint32_t arg);
|
||||||
#if W5500_MODBUS_NUM > 0
|
//#if W5500_MODBUS_NUM > 0
|
||||||
void protocol_w5500_modbus_tcp_server1_poll(uint32_t base_time)
|
//void protocol_w5500_modbus_tcp_server1_poll(uint32_t base_time)
|
||||||
{
|
//{
|
||||||
//bsp_iec104_poll(&w5500_iec104_array[0]);
|
// //bsp_iec104_poll(&w5500_iec104_array[0]);
|
||||||
bsp_modbus_poll(&w5500_modbus_tcp_array[0], true);
|
// bsp_modbus_poll(&w5500_modbus_tcp_array[0], true);
|
||||||
}
|
//}
|
||||||
#endif
|
//#endif
|
||||||
#if W5500_MODBUS_NUM > 1
|
//#if W5500_MODBUS_NUM > 1
|
||||||
void protocol_w5500_modbus_tcp_server2_poll(uint32_t base_time)
|
//void protocol_w5500_modbus_tcp_server2_poll(uint32_t base_time)
|
||||||
{
|
//{
|
||||||
//bsp_iec104_poll(&w5500_iec104_array[1]);
|
// //bsp_iec104_poll(&w5500_iec104_array[1]);
|
||||||
bsp_modbus_poll(&w5500_modbus_tcp_array[1], true);
|
// bsp_modbus_poll(&w5500_modbus_tcp_array[1], true);
|
||||||
}
|
//}
|
||||||
#endif
|
//#endif
|
||||||
#if W5500_MODBUS_NUM > 2
|
//#if W5500_MODBUS_NUM > 2
|
||||||
void protocol_w5500_modbus_tcp_server3_poll(uint32_t base_time)
|
//void protocol_w5500_modbus_tcp_server3_poll(uint32_t base_time)
|
||||||
{
|
//{
|
||||||
//bsp_iec104_poll(&w5500_iec104_array[2]);
|
// //bsp_iec104_poll(&w5500_iec104_array[2]);
|
||||||
bsp_modbus_poll(&w5500_modbus_tcp_array[2], true);
|
// bsp_modbus_poll(&w5500_modbus_tcp_array[2], true);
|
||||||
}
|
//}
|
||||||
#endif
|
//#endif
|
||||||
#if W5500_MODBUS_NUM > 3
|
//#if W5500_MODBUS_NUM > 3
|
||||||
void protocol_w5500_modbus_tcp_server4_poll(uint32_t base_time)
|
//void protocol_w5500_modbus_tcp_server4_poll(uint32_t base_time)
|
||||||
{
|
//{
|
||||||
//bsp_iec104_poll(&w5500_iec104_array[3]);
|
// //bsp_iec104_poll(&w5500_iec104_array[3]);
|
||||||
bsp_modbus_poll(&w5500_modbus_tcp_array[3], true);
|
// bsp_modbus_poll(&w5500_modbus_tcp_array[3], true);
|
||||||
}
|
//}
|
||||||
#endif
|
//#endif
|
||||||
#if W5500_MODBUS_NUM > 4
|
//#if W5500_MODBUS_NUM > 4
|
||||||
void protocol_w5500_modbus_tcp_server5_poll(uint32_t base_time)
|
//void protocol_w5500_modbus_tcp_server5_poll(uint32_t base_time)
|
||||||
{
|
//{
|
||||||
//bsp_iec104_poll(&w5500_iec104_array[4]);
|
// //bsp_iec104_poll(&w5500_iec104_array[4]);
|
||||||
bsp_modbus_poll(&w5500_modbus_tcp_array[4], true);
|
// bsp_modbus_poll(&w5500_modbus_tcp_array[4], true);
|
||||||
}
|
//}
|
||||||
#endif
|
//#endif
|
||||||
#if W5500_MODBUS_NUM > 5
|
//#if W5500_MODBUS_NUM > 5
|
||||||
void protocol_w5500_modbus_tcp_server6_poll(uint32_t base_time)
|
//void protocol_w5500_modbus_tcp_server6_poll(uint32_t base_time)
|
||||||
{
|
//{
|
||||||
//bsp_iec104_poll(&w5500_iec104_array[5]);
|
// //bsp_iec104_poll(&w5500_iec104_array[5]);
|
||||||
bsp_modbus_poll(&w5500_modbus_tcp_array[5], true);
|
// bsp_modbus_poll(&w5500_modbus_tcp_array[5], true);
|
||||||
}
|
//}
|
||||||
#endif
|
//#endif
|
||||||
#if W5500_MODBUS_NUM > 6
|
//#if W5500_MODBUS_NUM > 6
|
||||||
void protocol_w5500_modbus_tcp_server7_poll(uint32_t base_time)
|
//void protocol_w5500_modbus_tcp_server7_poll(uint32_t base_time)
|
||||||
{
|
//{
|
||||||
//bsp_iec104_poll(&w5500_iec104_array[6]);
|
// //bsp_iec104_poll(&w5500_iec104_array[6]);
|
||||||
bsp_modbus_poll(&w5500_modbus_tcp_array[6], true);
|
// bsp_modbus_poll(&w5500_modbus_tcp_array[6], true);
|
||||||
}
|
//}
|
||||||
#endif
|
//#endif
|
||||||
#if W5500_MODBUS_NUM > 7
|
//#if W5500_MODBUS_NUM > 7
|
||||||
void protocol_w5500_modbus_tcp_server8_poll(uint32_t base_time)
|
//void protocol_w5500_modbus_tcp_server8_poll(uint32_t base_time)
|
||||||
{
|
//{
|
||||||
//bsp_iec104_poll(&w5500_iec104_array[7]);
|
// //bsp_iec104_poll(&w5500_iec104_array[7]);
|
||||||
bsp_modbus_poll(&w5500_modbus_tcp_array[7], true);
|
// bsp_modbus_poll(&w5500_modbus_tcp_array[7], true);
|
||||||
}
|
//}
|
||||||
#endif
|
//#endif
|
||||||
|
|
||||||
const UintArgCall tcp_server_poll[W5500_MODBUS_NUM] =
|
//const UintArgCall tcp_server_poll[W5500_MODBUS_NUM] =
|
||||||
{
|
//{
|
||||||
protocol_w5500_modbus_tcp_server1_poll,
|
// protocol_w5500_modbus_tcp_server1_poll,
|
||||||
protocol_w5500_modbus_tcp_server2_poll,
|
// protocol_w5500_modbus_tcp_server2_poll,
|
||||||
|
//
|
||||||
/*
|
// /*
|
||||||
protocol_w5500_modbus_tcp_server3_poll,
|
// protocol_w5500_modbus_tcp_server3_poll,
|
||||||
protocol_w5500_modbus_tcp_server4_poll,
|
// protocol_w5500_modbus_tcp_server4_poll,
|
||||||
protocol_w5500_modbus_tcp_server5_poll,
|
// protocol_w5500_modbus_tcp_server5_poll,
|
||||||
protocol_w5500_modbus_tcp_server6_poll,
|
// protocol_w5500_modbus_tcp_server6_poll,
|
||||||
protocol_w5500_modbus_tcp_server7_poll,
|
// protocol_w5500_modbus_tcp_server7_poll,
|
||||||
protocol_w5500_modbus_tcp_server8_poll,
|
// protocol_w5500_modbus_tcp_server8_poll,
|
||||||
*/
|
// */
|
||||||
};
|
//};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
* @file protocol_mqtt_bcu.c
|
* @file protocol_mqtt_bcu.c
|
||||||
* @brief protocol_mqtt_bcu
|
* @brief protocol_mqtt_bcu
|
||||||
* @version V1.0
|
* @version V1.0
|
||||||
* @author Gary
|
* @author Gary Wangk
|
||||||
* @copyright
|
* @copyright
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
|
||||||
|
@ -695,126 +695,126 @@ const devPointMap bms_points[] = {
|
||||||
{"BCU_2", 0, 0, bms_get_total_alarm}, // 总告警
|
{"BCU_2", 0, 0, bms_get_total_alarm}, // 总告警
|
||||||
{"BCU_3", 0, 0, bms_get_total_fault}, // 总故障
|
{"BCU_3", 0, 0, bms_get_total_fault}, // 总故障
|
||||||
{"BCU_4", 0, 1, bms_get_fault_level_1}, // 单体过压告警一级
|
{"BCU_4", 0, 1, bms_get_fault_level_1}, // 单体过压告警一级
|
||||||
{"BCU_5", 0, 2, bms_get_fault_level_1}, // 单体欠压告警一级
|
// {"BCU_5", 0, 2, bms_get_fault_level_1}, // 单体欠压告警一级
|
||||||
{"BCU_6", 0, 3, bms_get_fault_level_1}, // 单体过温告警一级
|
// {"BCU_6", 0, 3, bms_get_fault_level_1}, // 单体过温告警一级
|
||||||
{"BCU_7", 0, 4, bms_get_fault_level_1}, // 单体低温告警一级
|
// {"BCU_7", 0, 4, bms_get_fault_level_1}, // 单体低温告警一级
|
||||||
{"BCU_8", 0, 5, bms_get_fault_level_1}, // 单体压差告警一级
|
// {"BCU_8", 0, 5, bms_get_fault_level_1}, // 单体压差告警一级
|
||||||
{"BCU_9", 0, 6, bms_get_fault_level_1}, // 充电过流告警一级
|
// {"BCU_9", 0, 6, bms_get_fault_level_1}, // 充电过流告警一级
|
||||||
{"BCU_10", 0, 7, bms_get_fault_level_1}, // 放电过流告警一级
|
// {"BCU_10", 0, 7, bms_get_fault_level_1}, // 放电过流告警一级
|
||||||
{"BCU_11", 0, 8, bms_get_fault_level_1}, // SOC过低告警一级
|
// {"BCU_11", 0, 8, bms_get_fault_level_1}, // SOC过低告警一级
|
||||||
{"BCU_12", 0, 9, bms_get_fault_level_1}, // SOC差异过大告警一级
|
// {"BCU_12", 0, 9, bms_get_fault_level_1}, // SOC差异过大告警一级
|
||||||
{"BCU_13", 0, 10, bms_get_fault_level_1}, // 绝缘过低告警一级
|
// {"BCU_13", 0, 10, bms_get_fault_level_1}, // 绝缘过低告警一级
|
||||||
|
|
||||||
{"BCU_14", 0, 1, bms_get_fault_level_2}, // 单体过压告警二级
|
// {"BCU_14", 0, 1, bms_get_fault_level_2}, // 单体过压告警二级
|
||||||
{"BCU_15", 0, 2, bms_get_fault_level_2}, // 单体欠压告警二级
|
// {"BCU_15", 0, 2, bms_get_fault_level_2}, // 单体欠压告警二级
|
||||||
{"BCU_16", 0, 3, bms_get_fault_level_2}, // 单体过温告警二级
|
// {"BCU_16", 0, 3, bms_get_fault_level_2}, // 单体过温告警二级
|
||||||
{"BCU_17", 0, 4, bms_get_fault_level_2}, // 单体低温告警二级
|
// {"BCU_17", 0, 4, bms_get_fault_level_2}, // 单体低温告警二级
|
||||||
{"BCU_18", 0, 5, bms_get_fault_level_2}, // 单体压差告警二级
|
// {"BCU_18", 0, 5, bms_get_fault_level_2}, // 单体压差告警二级
|
||||||
{"BCU_19", 0, 6, bms_get_fault_level_2}, // 充电过流告警二级
|
// {"BCU_19", 0, 6, bms_get_fault_level_2}, // 充电过流告警二级
|
||||||
{"BCU_20", 0, 7, bms_get_fault_level_2}, // 放电过流告警二级
|
// {"BCU_20", 0, 7, bms_get_fault_level_2}, // 放电过流告警二级
|
||||||
{"BCU_21", 0, 8, bms_get_fault_level_2}, // SOC过低告警二级
|
// {"BCU_21", 0, 8, bms_get_fault_level_2}, // SOC过低告警二级
|
||||||
{"BCU_22", 0, 9, bms_get_fault_level_2}, // SOC差异过大告警二级
|
// {"BCU_22", 0, 9, bms_get_fault_level_2}, // SOC差异过大告警二级
|
||||||
{"BCU_23", 0, 10, bms_get_fault_level_2}, // 绝缘过低告警二级
|
// {"BCU_23", 0, 10, bms_get_fault_level_2}, // 绝缘过低告警二级
|
||||||
|
|
||||||
{"BCU_24", 0, 1, bms_get_fault_level_3}, // 单体过压告警三级
|
// {"BCU_24", 0, 1, bms_get_fault_level_3}, // 单体过压告警三级
|
||||||
{"BCU_25", 0, 2, bms_get_fault_level_3}, // 单体欠压告警三级
|
// {"BCU_25", 0, 2, bms_get_fault_level_3}, // 单体欠压告警三级
|
||||||
{"BCU_26", 0, 3, bms_get_fault_level_3}, // 单体过温告警三级
|
// {"BCU_26", 0, 3, bms_get_fault_level_3}, // 单体过温告警三级
|
||||||
{"BCU_27", 0, 4, bms_get_fault_level_3}, // 单体低温告警三级
|
// {"BCU_27", 0, 4, bms_get_fault_level_3}, // 单体低温告警三级
|
||||||
{"BCU_28", 0, 5, bms_get_fault_level_3}, // 单体压差告警三级
|
// {"BCU_28", 0, 5, bms_get_fault_level_3}, // 单体压差告警三级
|
||||||
{"BCU_29", 0, 6, bms_get_fault_level_3}, // 充电过流告警三级
|
// {"BCU_29", 0, 6, bms_get_fault_level_3}, // 充电过流告警三级
|
||||||
{"BCU_30", 0, 7, bms_get_fault_level_3}, // 放电过流告警三级
|
// {"BCU_30", 0, 7, bms_get_fault_level_3}, // 放电过流告警三级
|
||||||
{"BCU_31", 0, 8, bms_get_fault_level_3}, // SOC过低告警三级
|
// {"BCU_31", 0, 8, bms_get_fault_level_3}, // SOC过低告警三级
|
||||||
{"BCU_32", 0, 9, bms_get_fault_level_3}, // SOC差异过大告警三级
|
// {"BCU_32", 0, 9, bms_get_fault_level_3}, // SOC差异过大告警三级
|
||||||
{"BCU_33", 0, 10, bms_get_fault_level_3}, // 绝缘过低告警三级
|
// {"BCU_33", 0, 10, bms_get_fault_level_3}, // 绝缘过低告警三级
|
||||||
|
|
||||||
{"BCU_34", 0, 0, NULL}, // 电芯温度极限告警
|
// {"BCU_34", 0, 0, NULL}, // 电芯温度极限告警
|
||||||
{"BCU_35", 0, 0, NULL}, // 电芯电压极限告警
|
// {"BCU_35", 0, 0, NULL}, // 电芯电压极限告警
|
||||||
{"BCU_36", 0, 0, NULL}, // 簇间环流1级告警
|
// {"BCU_36", 0, 0, NULL}, // 簇间环流1级告警
|
||||||
{"BCU_37", 0, 0, NULL}, // 簇间环流2级告警
|
// {"BCU_37", 0, 0, NULL}, // 簇间环流2级告警
|
||||||
{"BCU_38", 0, 0, NULL}, // 簇间环流3级告警
|
// {"BCU_38", 0, 0, NULL}, // 簇间环流3级告警
|
||||||
{"BCU_39", 0, 0, NULL}, // 簇间电流差1级告警
|
// {"BCU_39", 0, 0, NULL}, // 簇间电流差1级告警
|
||||||
{"BCU_40", 0, 0, NULL}, // 簇间电流差2级告警
|
// {"BCU_40", 0, 0, NULL}, // 簇间电流差2级告警
|
||||||
{"BCU_41", 0, 0, NULL}, // 簇间电流差3级告警
|
// {"BCU_41", 0, 0, NULL}, // 簇间电流差3级告警
|
||||||
|
|
||||||
{"BCU_42", 1, 11, bms_get_fault_level_1}, // 组端过压1级告警
|
// {"BCU_42", 1, 11, bms_get_fault_level_1}, // 组端过压1级告警
|
||||||
{"BCU_43", 1, 11, bms_get_fault_level_2}, // 组端过压2级告警
|
// {"BCU_43", 1, 11, bms_get_fault_level_2}, // 组端过压2级告警
|
||||||
{"BCU_44", 1, 11, bms_get_fault_level_3}, // 组端过压3级告警
|
// {"BCU_44", 1, 11, bms_get_fault_level_3}, // 组端过压3级告警
|
||||||
{"BCU_45", 1, 12, bms_get_fault_level_1}, // 组端欠压1级告警
|
// {"BCU_45", 1, 12, bms_get_fault_level_1}, // 组端欠压1级告警
|
||||||
{"BCU_46", 1, 12, bms_get_fault_level_2}, // 组端欠压2级告警
|
// {"BCU_46", 1, 12, bms_get_fault_level_2}, // 组端欠压2级告警
|
||||||
{"BCU_47", 1, 12, bms_get_fault_level_3}, // 组端欠压3级告警
|
// {"BCU_47", 1, 12, bms_get_fault_level_3}, // 组端欠压3级告警
|
||||||
{"BCU_48", 1, 13, bms_get_fault_level_1}, // 极柱过温1级告警
|
// {"BCU_48", 1, 13, bms_get_fault_level_1}, // 极柱过温1级告警
|
||||||
{"BCU_49", 1, 13, bms_get_fault_level_2}, // 极柱过温2级告警
|
// {"BCU_49", 1, 13, bms_get_fault_level_2}, // 极柱过温2级告警
|
||||||
{"BCU_50", 1, 13, bms_get_fault_level_3}, // 极柱过温3级告警
|
// {"BCU_50", 1, 13, bms_get_fault_level_3}, // 极柱过温3级告警
|
||||||
|
|
||||||
{"BCU_51", 1, 0, NULL}, // AFE温感排线异常
|
// {"BCU_51", 1, 0, NULL}, // AFE温感排线异常
|
||||||
{"BCU_52", 1, 0, NULL}, // AFE电压排线异常
|
// {"BCU_52", 1, 0, NULL}, // AFE电压排线异常
|
||||||
{"BCU_53", 1, 0, NULL}, // 与电池簇通信告警
|
// {"BCU_53", 1, 0, NULL}, // 与电池簇通信告警
|
||||||
{"BCU_54", 1, 0, NULL}, // 主从通讯告警
|
// {"BCU_54", 1, 0, NULL}, // 主从通讯告警
|
||||||
{"BCU_55", 1, 14, bms_get_fault_level_3}, // 继电器粘连告警
|
// {"BCU_55", 1, 14, bms_get_fault_level_3}, // 继电器粘连告警
|
||||||
{"BCU_56", 1, 15, bms_get_fault_level_3}, // 电池极限故障
|
// {"BCU_56", 1, 15, bms_get_fault_level_3}, // 电池极限故障
|
||||||
{"BCU_57", 1, 0, NULL}, // 熔丝故障
|
// {"BCU_57", 1, 0, NULL}, // 熔丝故障
|
||||||
{"BCU_58", 1, 0, NULL}, // 断路器故障
|
// {"BCU_58", 1, 0, NULL}, // 断路器故障
|
||||||
{"BCU_59", 1, 0, NULL}, // 空调故障
|
// {"BCU_59", 1, 0, NULL}, // 空调故障
|
||||||
{"BCU_60", 1, 0, NULL}, // 消防设备故障
|
// {"BCU_60", 1, 0, NULL}, // 消防设备故障
|
||||||
{"BCU_61", 1, 0, NULL}, // 消防火警
|
// {"BCU_61", 1, 0, NULL}, // 消防火警
|
||||||
{"BCU_62", 1, 0, NULL}, // 消防喷洒
|
// {"BCU_62", 1, 0, NULL}, // 消防喷洒
|
||||||
{"BCU_63", 1, 0, NULL}, // AFE故障
|
// {"BCU_63", 1, 0, NULL}, // AFE故障
|
||||||
{"BCU_64", 1, 14, bms_get_fault_level_1}, // 高压异常
|
// {"BCU_64", 1, 14, bms_get_fault_level_1}, // 高压异常
|
||||||
{"BCU_65", 1, 16, bms_get_fault_level_3}, // 预充告警
|
// {"BCU_65", 1, 16, bms_get_fault_level_3}, // 预充告警
|
||||||
{"BCU_66", 1, 17, bms_get_fault_level_3}, // 开路故障
|
// {"BCU_66", 1, 17, bms_get_fault_level_3}, // 开路故障
|
||||||
|
|
||||||
{"BCU_67", 1, 1, bms_get_baseInfo}, // 总压
|
// {"BCU_67", 1, 1, bms_get_baseInfo}, // 总压
|
||||||
{"BCU_68", 1, 2, bms_get_baseInfo}, // 总电流
|
// {"BCU_68", 1, 2, bms_get_baseInfo}, // 总电流
|
||||||
{"BCU_69", 1, 3, bms_get_baseInfo}, // SOC
|
// {"BCU_69", 1, 3, bms_get_baseInfo}, // SOC
|
||||||
{"BCU_70", 1, 4, bms_get_baseInfo}, // SOH
|
// {"BCU_70", 1, 4, bms_get_baseInfo}, // SOH
|
||||||
{"BCU_71", 1, 5, bms_get_baseInfo}, // SOE
|
// {"BCU_71", 1, 5, bms_get_baseInfo}, // SOE
|
||||||
{"BCU_72", 1, 6, bms_get_baseInfo}, // 额定总压
|
// {"BCU_72", 1, 6, bms_get_baseInfo}, // 额定总压
|
||||||
{"BCU_73", 1, 7, bms_get_baseInfo}, // 额定容量
|
// {"BCU_73", 1, 7, bms_get_baseInfo}, // 额定容量
|
||||||
{"BCU_74", 1, 8, bms_get_baseInfo}, // 剩余容量
|
// {"BCU_74", 1, 8, bms_get_baseInfo}, // 剩余容量
|
||||||
{"BCU_75", 1, 9, bms_get_baseInfo}, // 额定电量
|
// {"BCU_75", 1, 9, bms_get_baseInfo}, // 额定电量
|
||||||
{"BCU_76", 1, 10, bms_get_baseInfo}, // 剩余电量
|
// {"BCU_76", 1, 10, bms_get_baseInfo}, // 剩余电量
|
||||||
{"BCU_77", 1, 11, bms_get_baseInfo}, // 从机总数(BMU)
|
// {"BCU_77", 1, 11, bms_get_baseInfo}, // 从机总数(BMU)
|
||||||
{"BCU_78", 1, 12, bms_get_baseInfo}, // 在线从机总数(BMU)
|
// {"BCU_78", 1, 12, bms_get_baseInfo}, // 在线从机总数(BMU)
|
||||||
{"BCU_79", 1, 13, bms_get_baseInfo}, // 电池总数
|
// {"BCU_79", 1, 13, bms_get_baseInfo}, // 电池总数
|
||||||
{"BCU_80", 1, 14, bms_get_baseInfo}, // 在线电池总数
|
// {"BCU_80", 1, 14, bms_get_baseInfo}, // 在线电池总数
|
||||||
{"BCU_81", 1, 15, bms_get_baseInfo}, // 温感总数
|
// {"BCU_81", 1, 15, bms_get_baseInfo}, // 温感总数
|
||||||
|
|
||||||
{"BCU_82", 2, 16, bms_get_baseInfo}, // 在线温感总数
|
// {"BCU_82", 2, 16, bms_get_baseInfo}, // 在线温感总数
|
||||||
{"BCU_83", 2, 17, bms_get_baseInfo}, // 最大允许放电电流
|
// {"BCU_83", 2, 17, bms_get_baseInfo}, // 最大允许放电电流
|
||||||
{"BCU_84", 2, 18, bms_get_baseInfo}, // 最大允许放电功率
|
// {"BCU_84", 2, 18, bms_get_baseInfo}, // 最大允许放电功率
|
||||||
{"BCU_85", 2, 19, bms_get_baseInfo}, // 最大允许充电电流
|
// {"BCU_85", 2, 19, bms_get_baseInfo}, // 最大允许充电电流
|
||||||
{"BCU_86", 2, 20, bms_get_baseInfo}, // 最大允许充电功率
|
// {"BCU_86", 2, 20, bms_get_baseInfo}, // 最大允许充电功率
|
||||||
{"BCU_87", 2, 21, bms_get_baseInfo}, // 正极绝缘阻值
|
// {"BCU_87", 2, 21, bms_get_baseInfo}, // 正极绝缘阻值
|
||||||
{"BCU_88", 2, 22, bms_get_baseInfo}, // 负极绝缘阻值
|
// {"BCU_88", 2, 22, bms_get_baseInfo}, // 负极绝缘阻值
|
||||||
{"BCU_89", 2, 23, bms_get_baseInfo}, // 单体平均电压
|
// {"BCU_89", 2, 23, bms_get_baseInfo}, // 单体平均电压
|
||||||
{"BCU_90", 2, 24, bms_get_baseInfo}, // 单体最大压差
|
// {"BCU_90", 2, 24, bms_get_baseInfo}, // 单体最大压差
|
||||||
{"BCU_91", 2, 25, bms_get_baseInfo}, // 最高单体电压
|
// {"BCU_91", 2, 25, bms_get_baseInfo}, // 最高单体电压
|
||||||
{"BCU_92", 2, 26, bms_get_baseInfo}, // 最高单体电压从机号
|
// {"BCU_92", 2, 26, bms_get_baseInfo}, // 最高单体电压从机号
|
||||||
{"BCU_93", 2, 27, bms_get_baseInfo}, // 最高单体电压编号
|
// {"BCU_93", 2, 27, bms_get_baseInfo}, // 最高单体电压编号
|
||||||
{"BCU_94", 2, 28, bms_get_baseInfo}, // 最低单体电压
|
// {"BCU_94", 2, 28, bms_get_baseInfo}, // 最低单体电压
|
||||||
{"BCU_95", 2, 29, bms_get_baseInfo}, // 最低单体电压从机号
|
// {"BCU_95", 2, 29, bms_get_baseInfo}, // 最低单体电压从机号
|
||||||
{"BCU_96", 2, 30, bms_get_baseInfo}, // 最低单体电压编号
|
// {"BCU_96", 2, 30, bms_get_baseInfo}, // 最低单体电压编号
|
||||||
{"BCU_97", 2, 31, bms_get_baseInfo}, // 单体平均温度
|
// {"BCU_97", 2, 31, bms_get_baseInfo}, // 单体平均温度
|
||||||
{"BCU_98", 2, 32, bms_get_baseInfo}, // 最大温差
|
// {"BCU_98", 2, 32, bms_get_baseInfo}, // 最大温差
|
||||||
{"BCU_99", 2, 33, bms_get_baseInfo}, // 最高单体温度
|
// {"BCU_99", 2, 33, bms_get_baseInfo}, // 最高单体温度
|
||||||
{"BCU_100", 2, 34, bms_get_baseInfo}, // 最高单体温度从机号
|
// {"BCU_100", 2, 34, bms_get_baseInfo}, // 最高单体温度从机号
|
||||||
{"BCU_101", 2, 35, bms_get_baseInfo}, // 最高单体温度编号
|
// {"BCU_101", 2, 35, bms_get_baseInfo}, // 最高单体温度编号
|
||||||
{"BCU_102", 2, 36, bms_get_baseInfo}, // 最低单体温度
|
// {"BCU_102", 2, 36, bms_get_baseInfo}, // 最低单体温度
|
||||||
{"BCU_103", 2, 37, bms_get_baseInfo}, // 最低单体温度从机号
|
// {"BCU_103", 2, 37, bms_get_baseInfo}, // 最低单体温度从机号
|
||||||
{"BCU_104", 2, 38, bms_get_baseInfo}, // 最低单体温度编号
|
// {"BCU_104", 2, 38, bms_get_baseInfo}, // 最低单体温度编号
|
||||||
{"BCU_105", 2, 39, bms_get_baseInfo}, // 日充电容量
|
// {"BCU_105", 2, 39, bms_get_baseInfo}, // 日充电容量
|
||||||
{"BCU_106", 2, 40, bms_get_baseInfo}, // 日充电电量
|
// {"BCU_106", 2, 40, bms_get_baseInfo}, // 日充电电量
|
||||||
{"BCU_107", 2, 41, bms_get_baseInfo}, // 日放电容量
|
// {"BCU_107", 2, 41, bms_get_baseInfo}, // 日放电容量
|
||||||
{"BCU_108", 2, 42, bms_get_baseInfo}, // 日放电电量
|
// {"BCU_108", 2, 42, bms_get_baseInfo}, // 日放电电量
|
||||||
{"BCU_109", 2, 43, bms_get_baseInfo}, // 日充电时间
|
// {"BCU_109", 2, 43, bms_get_baseInfo}, // 日充电时间
|
||||||
{"BCU_110", 2, 44, bms_get_baseInfo}, // 日放电时间
|
// {"BCU_110", 2, 44, bms_get_baseInfo}, // 日放电时间
|
||||||
{"BCU_111", 2, 45, bms_get_baseInfo}, // 累计充电容量
|
// {"BCU_111", 2, 45, bms_get_baseInfo}, // 累计充电容量
|
||||||
{"BCU_112", 2, 46, bms_get_baseInfo}, // 累计充电电量
|
// {"BCU_112", 2, 46, bms_get_baseInfo}, // 累计充电电量
|
||||||
{"BCU_113", 2, 47, bms_get_baseInfo}, // 累计放电容量
|
// {"BCU_113", 2, 47, bms_get_baseInfo}, // 累计放电容量
|
||||||
{"BCU_114", 2, 48, bms_get_baseInfo}, // 累计放电电量
|
// {"BCU_114", 2, 48, bms_get_baseInfo}, // 累计放电电量
|
||||||
{"BCU_115", 2, 49, bms_get_baseInfo}, // 累计充电时间
|
// {"BCU_115", 2, 49, bms_get_baseInfo}, // 累计充电时间
|
||||||
{"BCU_116", 2, 50, bms_get_baseInfo}, // 累计放电时间
|
// {"BCU_116", 2, 50, bms_get_baseInfo}, // 累计放电时间
|
||||||
{"BCU_117", 2, 51, bms_get_baseInfo}, // BCU工作状态
|
// {"BCU_117", 2, 51, bms_get_baseInfo}, // BCU工作状态
|
||||||
};
|
};
|
||||||
|
|
||||||
const int bms_point_count = sizeof(bms_points) / sizeof(bms_points[0]);
|
const int bms_point_count = sizeof(bms_points) / sizeof(bms_points[0]);
|
||||||
|
@ -850,38 +850,39 @@ const devCellPointMap bms_temp_points[] =
|
||||||
const int bms_volt_count = sizeof(bms_volt_points) / sizeof(devCellPointMap);
|
const int bms_volt_count = sizeof(bms_volt_points) / sizeof(devCellPointMap);
|
||||||
const int bms_temp_count = sizeof(bms_temp_points) / sizeof(devCellPointMap);
|
const int bms_temp_count = sizeof(bms_temp_points) / sizeof(devCellPointMap);
|
||||||
|
|
||||||
|
|
||||||
void protocol_build_json(uint16_t groupId)
|
void protocol_build_json(uint16_t groupId)
|
||||||
{
|
{
|
||||||
int val = 0;
|
int val = 0;
|
||||||
cJSON* root = cJSON_CreateObject();
|
cJSON* root = cJSON_CreateObject();
|
||||||
|
|
||||||
|
// 添加时间戳
|
||||||
cJSON_AddNumberToObject(root, "timeStamp", drv_rtc_get_tick());
|
cJSON_AddNumberToObject(root, "timeStamp", drv_rtc_get_tick());
|
||||||
|
|
||||||
// devData 数组
|
// devData 数组(仅包含一个设备对象)
|
||||||
cJSON* devDataArr = cJSON_CreateArray();
|
cJSON* devDataArr = cJSON_CreateArray();
|
||||||
cJSON_AddItemToObject(root, "devData", devDataArr);
|
cJSON_AddItemToObject(root, "devData", devDataArr);
|
||||||
|
|
||||||
// 构建每一个设备项
|
// 设备对象
|
||||||
cJSON* deviceObj = cJSON_CreateObject();
|
cJSON* deviceObj = cJSON_CreateObject();
|
||||||
cJSON_AddItemToArray(devDataArr, deviceObj);
|
cJSON_AddItemToArray(devDataArr, deviceObj);
|
||||||
|
|
||||||
|
// 仅添加关键字段
|
||||||
cJSON_AddStringToObject(deviceObj, "devType", "4");
|
cJSON_AddStringToObject(deviceObj, "devType", "4");
|
||||||
cJSON_AddStringToObject(deviceObj, "devName", "BCU");
|
// cJSON_AddStringToObject(deviceObj, "devName", "BCU");
|
||||||
cJSON_AddStringToObject(deviceObj, "devId", "001");
|
cJSON_AddStringToObject(deviceObj, "devId", "001");
|
||||||
cJSON_AddStringToObject(deviceObj, "sn", "SN123456");
|
cJSON_AddStringToObject(deviceObj, "sn", "SN123456");
|
||||||
cJSON_AddNumberToObject(deviceObj, "currentPack", groupId); // 当前包数
|
// cJSON_AddNumberToObject(deviceObj, "currentPack", groupId);
|
||||||
cJSON_AddNumberToObject(deviceObj, "totalPack", 16); //总包数
|
// cJSON_AddNumberToObject(deviceObj, "totalPack", 16);
|
||||||
|
// cJSON_AddNumberToObject(deviceObj, "BCU1", 1);
|
||||||
// 构建 data 对象
|
// cJSON_AddNumberToObject(deviceObj, "BCU2", 2);
|
||||||
cJSON* dataObj = cJSON_CreateObject();
|
|
||||||
cJSON_AddItemToObject(deviceObj, "data", dataObj);
|
|
||||||
|
|
||||||
for (int i = 0; i < bms_point_count; ++i)
|
for (int i = 0; i < bms_point_count; ++i)
|
||||||
{
|
{
|
||||||
const devPointMap* point = &bms_points[i];
|
const devPointMap* point = &bms_points[i];
|
||||||
if(point->groupId == groupId)
|
if(point->groupId == groupId)
|
||||||
{
|
{
|
||||||
if (bms_points[i].get_val != NULL)
|
if (point->get_val != NULL)
|
||||||
{
|
{
|
||||||
val = point->get_val(point->input);
|
val = point->get_val(point->input);
|
||||||
}
|
}
|
||||||
|
@ -890,21 +891,27 @@ void protocol_build_json(uint16_t groupId)
|
||||||
val = 0; // 默认值
|
val = 0; // 默认值
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
cJSON_AddNumberToObject(dataObj, point->key, val);
|
cJSON_AddNumberToObject(deviceObj, point->key, val);
|
||||||
}
|
}
|
||||||
|
|
||||||
// 转为 JSON 字符串
|
|
||||||
char* json_str = cJSON_PrintUnformatted(root);
|
char* json_str = cJSON_PrintUnformatted(root);
|
||||||
if (json_str)
|
if (json_str)
|
||||||
{
|
{
|
||||||
drv_mqtt_publish(json_str, strlen(json_str));
|
drv_mqtt_publish_no_respose(json_str, strlen(json_str));
|
||||||
|
bsp_task_delay_ms(10);
|
||||||
|
cJSON_free(json_str);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
drv_mqtt_publish_no_respose("1", 1);
|
||||||
|
bsp_task_delay_ms(10);
|
||||||
cJSON_free(json_str);
|
cJSON_free(json_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
cJSON_Delete(root);
|
cJSON_Delete(root);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void protocol_build_volt_json(uint8_t i)
|
void protocol_build_volt_json(uint8_t i)
|
||||||
{
|
{
|
||||||
const devCellPointMap* item = &bms_volt_points[i];
|
const devCellPointMap* item = &bms_volt_points[i];
|
||||||
|
@ -952,7 +959,7 @@ void protocol_build_volt_json(uint8_t i)
|
||||||
char* json_str = cJSON_PrintUnformatted(root);
|
char* json_str = cJSON_PrintUnformatted(root);
|
||||||
if (json_str)
|
if (json_str)
|
||||||
{
|
{
|
||||||
drv_mqtt_publish(json_str, strlen(json_str));
|
drv_mqtt_publish_no_respose(json_str, strlen(json_str));
|
||||||
cJSON_free(json_str);
|
cJSON_free(json_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1006,7 +1013,7 @@ void protocol_build_temp_json(uint8_t i)
|
||||||
char* json_str = cJSON_PrintUnformatted(root);
|
char* json_str = cJSON_PrintUnformatted(root);
|
||||||
if (json_str)
|
if (json_str)
|
||||||
{
|
{
|
||||||
drv_mqtt_publish(json_str, strlen(json_str));
|
drv_mqtt_publish_no_respose(json_str, strlen(json_str));
|
||||||
cJSON_free(json_str);
|
cJSON_free(json_str);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1049,8 +1056,9 @@ void mqtt_publish_bms_data(uint32_t basetime)
|
||||||
|
|
||||||
mqtt_cycle_tick += basetime;
|
mqtt_cycle_tick += basetime;
|
||||||
|
|
||||||
if(mqtt_cycle_tick > 60000)
|
if(mqtt_cycle_tick > 500)
|
||||||
{
|
{
|
||||||
|
drv_wireless_send_string("AT+QMTPUB=0,1,2,0,\"BCU01\",17,\"Hello from FC41D!\"");
|
||||||
mqtt_cycle_tick = 0;
|
mqtt_cycle_tick = 0;
|
||||||
publish_all_bms_groups();
|
publish_all_bms_groups();
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,15 +10,15 @@
|
||||||
<TargetName>stm32f407</TargetName>
|
<TargetName>stm32f407</TargetName>
|
||||||
<ToolsetNumber>0x4</ToolsetNumber>
|
<ToolsetNumber>0x4</ToolsetNumber>
|
||||||
<ToolsetName>ARM-ADS</ToolsetName>
|
<ToolsetName>ARM-ADS</ToolsetName>
|
||||||
<pArmCC>5060960::V5.06 update 7 (build 960)::.\ARM_Compiler_5.06u7</pArmCC>
|
<pArmCC>5050106::V5.05 update 1 (build 106)::ARMCC</pArmCC>
|
||||||
<pCCUsed>5060960::V5.06 update 7 (build 960)::.\ARM_Compiler_5.06u7</pCCUsed>
|
<pCCUsed>5050106::V5.05 update 1 (build 106)::ARMCC</pCCUsed>
|
||||||
<uAC6>0</uAC6>
|
<uAC6>0</uAC6>
|
||||||
<TargetOption>
|
<TargetOption>
|
||||||
<TargetCommonOption>
|
<TargetCommonOption>
|
||||||
<Device>STM32F407ZGTx</Device>
|
<Device>STM32F407ZGTx</Device>
|
||||||
<Vendor>STMicroelectronics</Vendor>
|
<Vendor>STMicroelectronics</Vendor>
|
||||||
<PackID>Keil.STM32F4xx_DFP.3.0.0</PackID>
|
<PackID>Keil.STM32F4xx_DFP.2.16.0</PackID>
|
||||||
<PackURL>https://www.keil.com/pack/</PackURL>
|
<PackURL>http://www.keil.com/pack/</PackURL>
|
||||||
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
<Cpu>IRAM(0x20000000,0x00020000) IRAM2(0x10000000,0x00010000) IROM(0x08000000,0x00100000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE</Cpu>
|
||||||
<FlashUtilSpec></FlashUtilSpec>
|
<FlashUtilSpec></FlashUtilSpec>
|
||||||
<StartupFile></StartupFile>
|
<StartupFile></StartupFile>
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,39 +1,45 @@
|
||||||
[BREAKPOINTS]
|
[BREAKPOINTS]
|
||||||
ForceImpTypeAny = 0
|
FForceImpTypeAny = 0
|
||||||
ShowInfoWin = 1
|
ShowInfoWin = 1
|
||||||
EnableFlashBP = 2
|
EnableFlashBP = 2
|
||||||
BPDuringExecution = 0
|
BPDuringExecution = 0
|
||||||
|
orceImpTypeAny = 0
|
||||||
[CFI]
|
[CFI]
|
||||||
CFISize = 0x00
|
CCFISize = 0x00
|
||||||
CFIAddr = 0x00
|
CFIAddr = 0x00
|
||||||
|
FISize = 0x00
|
||||||
[CPU]
|
[CPU]
|
||||||
MonModeVTableAddr = 0xFFFFFFFF
|
MOverrideMemMap = 0
|
||||||
|
AllowSimulation = 1
|
||||||
|
ScriptFile=""
|
||||||
|
onModeVTableAddr = 0xFFFFFFFF
|
||||||
MonModeDebug = 0
|
MonModeDebug = 0
|
||||||
MaxNumAPs = 0
|
MaxNumAPs = 0
|
||||||
LowPowerHandlingMode = 0
|
LowPowerHandlingMode = 0
|
||||||
OverrideMemMap = 0
|
|
||||||
AllowSimulation = 1
|
|
||||||
ScriptFile=""
|
|
||||||
[FLASH]
|
[FLASH]
|
||||||
CacheExcludeSize = 0x00
|
CCacheExcludeSize = 0x00
|
||||||
CacheExcludeAddr = 0x00
|
CacheExcludeAddr = 0x00
|
||||||
MinNumBytesFlashDL = 0
|
MinNumBytesFlashDL = 0
|
||||||
SkipProgOnCRCMatch = 1
|
SkipProgOnCRCMatch = 1
|
||||||
VerifyDownload = 1
|
VerifyDownload = 1
|
||||||
AllowCaching = 1
|
AllowCaching = 1
|
||||||
EnableFlashDL = 2
|
EnableFlashDL = 2
|
||||||
Override = 0
|
Override = 1
|
||||||
Device="ARM7"
|
Device="Unspecified"
|
||||||
|
acheExcludeSize = 0x00
|
||||||
[GENERAL]
|
[GENERAL]
|
||||||
WorkRAMSize = 0x00
|
WWorkRAMSize = 0x00
|
||||||
WorkRAMAddr = 0x00
|
WorkRAMAddr = 0x00
|
||||||
RAMUsageLimit = 0x00
|
RAMUsageLimit = 0x00
|
||||||
|
orkRAMSize = 0x00
|
||||||
[SWO]
|
[SWO]
|
||||||
SWOLogFile=""
|
SSWOLogFile=""
|
||||||
|
WOLogFile=""
|
||||||
[MEM]
|
[MEM]
|
||||||
RdOverrideOrMask = 0x00
|
RRdOverrideOrMask = 0x00
|
||||||
RdOverrideAndMask = 0xFFFFFFFF
|
RdOverrideAndMask = 0xFFFFFFFF
|
||||||
RdOverrideAddr = 0xFFFFFFFF
|
RdOverrideAddr = 0xFFFFFFFF
|
||||||
WrOverrideOrMask = 0x00
|
WrOverrideOrMask = 0x00
|
||||||
WrOverrideAndMask = 0xFFFFFFFF
|
WrOverrideAndMask = 0xFFFFFFFF
|
||||||
WrOverrideAddr = 0xFFFFFFFF
|
WrOverrideAddr = 0xFFFFFFFF
|
||||||
|
dOverrideOrMask = 0x00
|
||||||
|
|
|
@ -104,9 +104,10 @@ void drv_eg25g_init2(void)
|
||||||
|
|
||||||
void drv_mqtt_connect(void)
|
void drv_mqtt_connect(void)
|
||||||
{
|
{
|
||||||
drv_send_at_cmd("AT+QMTCFG=\"recv/mode\",0,0,1", 500);
|
// drv_send_at_cmd("AT+QMTCFG=\"recv/mode\",0,0,1", 500);
|
||||||
drv_send_at_cmd("AT+QMTOPEN=0,\"mqtt.example.com\",1883", 5000);
|
drv_send_at_cmd("AT+QMTOPEN=0,\"47.120.14.45\",3011", 5000);
|
||||||
drv_send_at_cmd("AT+QMTCONN=0,\"client_id\",\"username\",\"password\"", 5000);
|
drv_send_at_cmd("AT+QMTCONN=0,\"clientBCUwifi01\"", 5000);
|
||||||
|
drv_send_at_cmd("AT+QMTSUB=0,1,\"BCU01\",2", 5000);
|
||||||
}
|
}
|
||||||
/*
|
/*
|
||||||
void drv_mqtt_publish(const char *topic, const char *message)
|
void drv_mqtt_publish(const char *topic, const char *message)
|
||||||
|
|
|
@ -10,9 +10,9 @@
|
||||||
|
|
||||||
uint8_t rev_buff[QFC41D_MAX_RECV_SIZE] = {0};
|
uint8_t rev_buff[QFC41D_MAX_RECV_SIZE] = {0};
|
||||||
uint8_t send_buff[QFC41D_MAX_SEND_SIZE] = {0};
|
uint8_t send_buff[QFC41D_MAX_SEND_SIZE] = {0};
|
||||||
char wifiName[40] = "bluesun-ess-XJ-5G", wifiPassWord[40] = "bluesun007", bleName[40] = "bsm1";
|
char wifiName[40] = "BLUESUNESS", wifiPassWord[40] = "bluesun009", bleName[40] = "bsm1";
|
||||||
|
|
||||||
char cmd[100] = {0}; //降低栈空间使用
|
char cmd[200] = {0}; //降低栈空间使用
|
||||||
//定义
|
//定义
|
||||||
WifiBleItem qfc41dItem = {
|
WifiBleItem qfc41dItem = {
|
||||||
.dev = QFC41D_UART_PORT,
|
.dev = QFC41D_UART_PORT,
|
||||||
|
@ -102,27 +102,52 @@ static uint8_t drv_wifi_init()
|
||||||
return 1 ;
|
return 1 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 3. 设置 Wi-Fi 为 DHCP使能
|
if (!drv_at_send_cmd("AT+QSTASTOP", "OK", WIFI_TIMEOUT))
|
||||||
if (!drv_at_send_cmd(QFC41D_SET_DHCP_ENABLE, "OK", WIFI_TIMEOUT))
|
|
||||||
{
|
{
|
||||||
KIT_PRINTF("Failed to set WiFi mode!\r\n");
|
KIT_PRINTF("Failed to set WiFi mode!\r\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 4. 连接 Wi-Fi
|
if (!drv_at_send_cmd("AT+QSOFTAPSTOP", "OK", WIFI_TIMEOUT))
|
||||||
snprintf(cmd, sizeof(cmd), "AT+QSTAAPINFODEF=%s,%s", wifiName, wifiPassWord);
|
|
||||||
if (!drv_at_send_cmd(cmd, "WIFI CONNECTED", WIFI_TIMEOUT * 2))
|
|
||||||
{
|
{
|
||||||
KIT_PRINTF("Failed to connect to WiFi!\r\n");
|
KIT_PRINTF("Failed to set WiFi mode!\r\n");
|
||||||
//return 1; //错误不返回-防止影响主任务执行
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 5. 获取 IP 地址
|
if (!drv_at_send_cmd("AT+QSTAAPINFO=BLUESUNESS,bluesun009", "OK", WIFI_CONNECT_TIMEOUT))
|
||||||
if (!drv_at_send_cmd("AT+QGETIP=station", "OK", WIFI_TIMEOUT))
|
|
||||||
{
|
{
|
||||||
KIT_PRINTF("Failed to get IP address!\r\n");
|
KIT_PRINTF("Failed to set WiFi mode!\r\n");
|
||||||
//return 1; //错误不返回-防止影响主任务执行
|
return 1;
|
||||||
}
|
}
|
||||||
|
kit_time_dly_ms(1000);
|
||||||
|
|
||||||
|
// if (!drv_at_send_cmd("AT+QSTAAPINFO=BLUESUNESS,bluesun009", "OK", WIFI_TIMEOUT))
|
||||||
|
// {
|
||||||
|
// KIT_PRINTF("Failed to set WiFi mode!\r\n");
|
||||||
|
// return 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// 3. 设置 Wi-Fi 为 DHCP使能
|
||||||
|
// if (!drv_at_send_cmd(QFC41D_SET_DHCP_ENABLE, "OK", WIFI_TIMEOUT))
|
||||||
|
// {
|
||||||
|
// KIT_PRINTF("Failed to set WiFi mode!\r\n");
|
||||||
|
// return 1;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// 4. 连接 Wi-Fi
|
||||||
|
// snprintf(cmd, sizeof(cmd), "AT+QSTAAPINFODEF=%s,%s", wifiName, wifiPassWord);
|
||||||
|
// if (!drv_at_send_cmd(cmd, "WIFI CONNECTED", WIFI_TIMEOUT * 2))
|
||||||
|
// {
|
||||||
|
// KIT_PRINTF("Failed to connect to WiFi!\r\n");
|
||||||
|
// //return 1; //错误不返回-防止影响主任务执行
|
||||||
|
// }
|
||||||
|
|
||||||
|
// // 5. 获取 IP 地址
|
||||||
|
// if (!drv_at_send_cmd("AT+QGETIP=station", "OK", WIFI_TIMEOUT))
|
||||||
|
// {
|
||||||
|
// KIT_PRINTF("Failed to get IP address!\r\n");
|
||||||
|
// //return 1; //错误不返回-防止影响主任务执行
|
||||||
|
// }
|
||||||
|
|
||||||
KIT_PRINTF("WiFi Initialization Successful!\r\n");
|
KIT_PRINTF("WiFi Initialization Successful!\r\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -189,7 +214,7 @@ static uint8_t drv_ble_init()
|
||||||
uint8_t drv_qfc41d_init(void)
|
uint8_t drv_qfc41d_init(void)
|
||||||
{
|
{
|
||||||
//初始化串口
|
//初始化串口
|
||||||
drv_uart_init((UartDev)qfc41dItem.dev, 9600, 0 | UART_CFG_STOP_BIT_1, kGpioType_WIRELESSUart_Tx, kGpioType_WIRELESSUart_Rx);
|
drv_uart_init((UartDev)qfc41dItem.dev, 115200, 0 | UART_CFG_STOP_BIT_1, kGpioType_WIRELESSUart_Tx, kGpioType_WIRELESSUart_Rx);
|
||||||
|
|
||||||
USART2->CR1 = USART_CR1_TE | USART_CR1_RE | USART_CR1_RXNEIE | USART_CR1_UE;
|
USART2->CR1 = USART_CR1_TE | USART_CR1_RE | USART_CR1_RXNEIE | USART_CR1_UE;
|
||||||
//设置接收回调函数
|
//设置接收回调函数
|
||||||
|
@ -212,12 +237,12 @@ uint8_t drv_qfc41d_init(void)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MQTT_BROKER "mqtt.47.120.14.45" // 你的 MQTT 服务器地址
|
#define MQTT_BROKER "47.120.14.45" // 你的 MQTT 服务器地址
|
||||||
#define MQTT_PORT 3011 // MQTT 端口
|
#define MQTT_PORT 3011 // MQTT 端口
|
||||||
#define MQTT_CLIENT_ID "fc41d_client" // 客户端 ID
|
#define MQTT_CLIENT_ID "fc41d_client" // 客户端 ID
|
||||||
#define MQTT_USER "user" // MQTT 用户名
|
#define MQTT_USER "user" // MQTT 用户名
|
||||||
#define MQTT_PASSWORD "password" // MQTT 密码
|
#define MQTT_PASSWORD "password" // MQTT 密码
|
||||||
#define MQTT_TOPIC "aa" // 订阅/发布的主题
|
#define MQTT_TOPIC "BCU01" // 订阅/发布的主题
|
||||||
#define MQTT_MESSAGE "Hello from FC41D!" // 发送的消息
|
#define MQTT_MESSAGE "Hello from FC41D!" // 发送的消息
|
||||||
|
|
||||||
// 连接 MQTT 服务器
|
// 连接 MQTT 服务器
|
||||||
|
@ -225,15 +250,15 @@ static uint8_t drv_mqtt_connect()
|
||||||
{
|
{
|
||||||
|
|
||||||
//1、设置 MQTT 协议的版本号为 V4
|
//1、设置 MQTT 协议的版本号为 V4
|
||||||
snprintf(cmd, sizeof(cmd), "AT+QMTCFG=\"version\",1,4");
|
// snprintf(cmd, sizeof(cmd), "AT+QMTCFG=\"version\",1,4");
|
||||||
if (!drv_at_send_cmd(cmd, "OK", WIFI_TIMEOUT))
|
// if (!drv_at_send_cmd(cmd, "OK", WIFI_TIMEOUT))
|
||||||
{
|
// {
|
||||||
KIT_PRINTF("Failed to set MQTT server!\r\n");
|
// KIT_PRINTF("Failed to set MQTT server!\r\n");
|
||||||
return 1;
|
// return 1;
|
||||||
}
|
// }
|
||||||
|
|
||||||
//2、建立 MQTT 客户端与服务器之间的会话连接
|
//2、建立 MQTT 客户端与服务器之间的会话连接
|
||||||
snprintf(cmd, sizeof(cmd), "AT+QMTOPEN=1,\"%s\",%d",MQTT_BROKER,MQTT_PORT);
|
snprintf(cmd, sizeof(cmd), "AT+QMTOPEN=0,\"%s\",%d",MQTT_BROKER,MQTT_PORT);
|
||||||
if (!drv_at_send_cmd(cmd, "OK", WIFI_TIMEOUT))
|
if (!drv_at_send_cmd(cmd, "OK", WIFI_TIMEOUT))
|
||||||
{
|
{
|
||||||
KIT_PRINTF("Failed to set MQTT server!\r\n");
|
KIT_PRINTF("Failed to set MQTT server!\r\n");
|
||||||
|
@ -242,14 +267,13 @@ static uint8_t drv_mqtt_connect()
|
||||||
|
|
||||||
|
|
||||||
//2、MQTT 客户端与服务器之间建立 MQTT 连接 AT+QMTCONN=<clientID>,<client_identity>,<username>,<password>
|
//2、MQTT 客户端与服务器之间建立 MQTT 连接 AT+QMTCONN=<clientID>,<client_identity>,<username>,<password>
|
||||||
snprintf(cmd, sizeof(cmd), "AT+QMTCONN=1,%s,%s,%s",MQTT_CLIENT_ID,MQTT_USER, MQTT_PASSWORD);
|
//snprintf(cmd, sizeof(cmd), "AT+QMTCONN=0,%s,%s,%s",MQTT_CLIENT_ID,MQTT_USER, MQTT_PASSWORD);
|
||||||
if (!drv_at_send_cmd(cmd, "OK", WIFI_TIMEOUT))
|
if (!drv_at_send_cmd("AT+QMTCONN=0,\"clientBCUwifi03\"", "OK", WIFI_TIMEOUT))
|
||||||
{
|
{
|
||||||
KIT_PRINTF("Failed to set MQTT client credentials!\r\n");
|
KIT_PRINTF("Failed to set MQTT client credentials!\r\n");
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
KIT_PRINTF("MQTT Connection Successful!\r\n");
|
KIT_PRINTF("MQTT Connection Successful!\r\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -257,14 +281,8 @@ static uint8_t drv_mqtt_connect()
|
||||||
// 订阅 MQTT 主题
|
// 订阅 MQTT 主题
|
||||||
static uint8_t drv_mqtt_subscribe()
|
static uint8_t drv_mqtt_subscribe()
|
||||||
{
|
{
|
||||||
snprintf(cmd, sizeof(cmd), "AT+MQTTSUB=1,1,\"%s\",0", MQTT_TOPIC);
|
snprintf(cmd, sizeof(cmd), "AT+MQTTSUB=0,1,\"%s\",2", MQTT_TOPIC);
|
||||||
if (!drv_at_send_cmd(cmd, "OK", WIFI_TIMEOUT))
|
drv_wireless_send_string(cmd);
|
||||||
{
|
|
||||||
KIT_PRINTF("Failed to subscribe to topic!\r\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
KIT_PRINTF("Subscribed to MQTT topic successfully!\r\n");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -276,7 +294,7 @@ static uint8_t drv_mqtt_subscribe()
|
||||||
*/
|
*/
|
||||||
uint8_t drv_mqtt_publish(char* str,uint16_t length)
|
uint8_t drv_mqtt_publish(char* str,uint16_t length)
|
||||||
{
|
{
|
||||||
snprintf(cmd, sizeof(cmd), "AT+QMTPUB=1,1,0,0,%s,%d,%s",MQTT_TOPIC, length,str);
|
snprintf(cmd, sizeof(cmd), "AT+QMTPUB=0,1,2,0,%s,%d,%s",MQTT_TOPIC, length, str);
|
||||||
if (!drv_at_send_cmd(cmd, "OK", WIFI_TIMEOUT))
|
if (!drv_at_send_cmd(cmd, "OK", WIFI_TIMEOUT))
|
||||||
{
|
{
|
||||||
KIT_PRINTF("Failed to publish message!\r\n");
|
KIT_PRINTF("Failed to publish message!\r\n");
|
||||||
|
@ -287,6 +305,14 @@ uint8_t drv_mqtt_publish(char* str,uint16_t length)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t drv_mqtt_publish_no_respose(char* str,uint16_t length)
|
||||||
|
{
|
||||||
|
// snprintf(cmd, sizeof(cmd), "AT+QMTPUB=0,1,2,0,%s,%d,%s",MQTT_TOPIC, length, str);
|
||||||
|
snprintf(cmd, sizeof(cmd), "AT+QMTPUB=0,1,2,0,\"%s\",%d,\"%s\"", MQTT_TOPIC, length, str);
|
||||||
|
drv_wireless_send_string(cmd);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// MQTT 初始化
|
// MQTT 初始化
|
||||||
uint8_t drv_mqtt_init()
|
uint8_t drv_mqtt_init()
|
||||||
{
|
{
|
||||||
|
|
|
@ -22,7 +22,8 @@
|
||||||
#define QFC41D_UART_PORT kUartDev_2
|
#define QFC41D_UART_PORT kUartDev_2
|
||||||
#define QFC41D_MAX_SEND_SIZE 2048
|
#define QFC41D_MAX_SEND_SIZE 2048
|
||||||
#define QFC41D_MAX_RECV_SIZE 200
|
#define QFC41D_MAX_RECV_SIZE 200
|
||||||
#define WIFI_TIMEOUT 100
|
#define WIFI_TIMEOUT 1000
|
||||||
|
#define WIFI_CONNECT_TIMEOUT 10000
|
||||||
|
|
||||||
#define QFC41D_RESTART_CMD "AT+QRST"
|
#define QFC41D_RESTART_CMD "AT+QRST"
|
||||||
#define QFC41D_PING_CMD "AT+QPING=<IP>"
|
#define QFC41D_PING_CMD "AT+QPING=<IP>"
|
||||||
|
@ -65,5 +66,7 @@ uint8_t drv_mqtt_init();
|
||||||
// 发布 MQTT 消息
|
// 发布 MQTT 消息
|
||||||
uint8_t drv_mqtt_publish(char* str,uint16_t length);
|
uint8_t drv_mqtt_publish(char* str,uint16_t length);
|
||||||
|
|
||||||
|
uint8_t drv_mqtt_publish_no_respose(char* str,uint16_t length);
|
||||||
|
|
||||||
#endif //DRV_QFC41D_H_
|
#endif //DRV_QFC41D_H_
|
||||||
|
|
||||||
|
|
|
@ -1,428 +1,428 @@
|
||||||
/******************************************************************************
|
///******************************************************************************
|
||||||
* @file drv_w5500.c
|
// * @file drv_w5500.c
|
||||||
* @brief w5500 drivers
|
// * @brief w5500 drivers
|
||||||
* @version V1.0
|
// * @version V1.0
|
||||||
* @author Gary
|
// * @author Gary
|
||||||
* @copyright
|
// * @copyright
|
||||||
******************************************************************************/
|
// ******************************************************************************/
|
||||||
#include "drv_gpio.h"
|
//#include "drv_gpio.h"
|
||||||
#include "drv_w5500.h"
|
//#include "drv_w5500.h"
|
||||||
|
|
||||||
#include "bsp_task.h"
|
//#include "bsp_task.h"
|
||||||
|
|
||||||
#include "kit_time.h"
|
//#include "kit_time.h"
|
||||||
#include "kit_data.h"
|
//#include "kit_data.h"
|
||||||
#include "kit_debug.h"
|
//#include "kit_debug.h"
|
||||||
|
|
||||||
#include "ucos_ii.h"
|
//#include "ucos_ii.h"
|
||||||
|
|
||||||
OS_EVENT *w5500_semaphore;
|
//OS_EVENT *w5500_semaphore;
|
||||||
|
|
||||||
void drv_w5500_init(W5500Item *item, uint32_t ip, uint16_t *port_array, uint32_t gateway_ip, uint32_t net_mask, uint8_t *mac, uint16_t timeout)
|
////void drv_w5500_init(W5500Item *item, uint32_t ip, uint16_t *port_array, uint32_t gateway_ip, uint32_t net_mask, uint8_t *mac, uint16_t timeout)
|
||||||
{
|
////{
|
||||||
uint8_t buf[20];
|
//// uint8_t buf[20];
|
||||||
uint32_t cnt = 0;
|
//// uint32_t cnt = 0;
|
||||||
|
////
|
||||||
|
//// item->server_port = port_array;
|
||||||
|
//// //自动协商 最高位置位,否则PHY重启
|
||||||
|
//// buf[0] = 0x38 | 0x80 | 0x40;
|
||||||
|
//// drv_w5500_write_comm_reg(item, W5500_PHYCFGR_REG_0x2E, buf, 1);
|
||||||
|
////
|
||||||
|
//// buf[0] = 0;
|
||||||
|
//// while(((buf[0] & 0x01) == 0x00) && (cnt++ < 50))
|
||||||
|
//// {
|
||||||
|
//// bsp_task_delay_ms(100);
|
||||||
|
//// drv_w5500_read_comm_reg(item, W5500_PHYCFGR_REG_0x2E, buf, 1);
|
||||||
|
//// }
|
||||||
|
////
|
||||||
|
//// KIT_MODULE_PRINTF(W5500_PRT_EN, "w5500 connet res %d\r\n", cnt < 100);
|
||||||
|
//// cnt = 0;
|
||||||
|
//// //设置网关IP
|
||||||
|
//// WRITE_LT_INT32U(buf, cnt, gateway_ip);
|
||||||
|
//// drv_w5500_write_comm_reg(item, W5500_GAR0_REG_0x01, buf, 4);
|
||||||
|
////
|
||||||
|
//// //设置子网掩码
|
||||||
|
//// cnt = 0;
|
||||||
|
//// WRITE_LT_INT32U(buf, cnt, net_mask);
|
||||||
|
//// drv_w5500_write_comm_reg(item, W5500_SUBR0_REG_0x05, buf, 4);
|
||||||
|
////
|
||||||
|
//// //设置MAC 地址
|
||||||
|
//// cnt = 0;
|
||||||
|
//// kit_copy_buf(buf, mac, 6);
|
||||||
|
//// drv_w5500_write_comm_reg(item, W5500_SHAR0_REG_0x09, buf, 6);
|
||||||
|
////
|
||||||
|
//// //设置ip地址
|
||||||
|
//// cnt = 0;
|
||||||
|
//// WRITE_LT_INT32U(buf, cnt, ip);
|
||||||
|
//// drv_w5500_write_comm_reg(item, W5500_SIPR0_REG_0x0F, buf, 4);
|
||||||
|
////
|
||||||
|
//// buf[0] = timeout / 200;
|
||||||
|
//// drv_w5500_write_comm_reg(item, W5500_GAR0_REG_0x01, buf, 1);
|
||||||
|
////#ifdef W5500_DEBUG
|
||||||
|
//// drv_w5500_read_comm_reg(item, W5500_GAR0_REG_0x01, buf, 4 + 4 + 6 + 4);
|
||||||
|
//// KIT_MODULE_PRINTF(W5500_PRT_EN, "w5500 param:");
|
||||||
|
//// KIT_PRINTF_U8_BUF(buf, 4 + 4 + 6 + 4);
|
||||||
|
////#endif
|
||||||
|
//// w5500_semaphore = OSSemCreate(1);
|
||||||
|
////}
|
||||||
|
|
||||||
item->server_port = port_array;
|
////uint8_t drv_w5500_get_socket_status(W5500Item *item, uint8_t socket)
|
||||||
//自动协商 最高位置位,否则PHY重启
|
////{
|
||||||
buf[0] = 0x38 | 0x80 | 0x40;
|
//// uint8_t buf[1];
|
||||||
drv_w5500_write_comm_reg(item, W5500_PHYCFGR_REG_0x2E, buf, 1);
|
//// uint8_t socket_reg = W5500_CREAT_SOCKET_REG(socket);
|
||||||
|
//// //读取当前socket状态
|
||||||
buf[0] = 0;
|
//// drv_w5500_read_socket_reg(item, socket_reg, Sn_SR_0x03, buf, 1);
|
||||||
while(((buf[0] & 0x01) == 0x00) && (cnt++ < 50))
|
////
|
||||||
{
|
//// return buf[0];
|
||||||
bsp_task_delay_ms(100);
|
////}
|
||||||
drv_w5500_read_comm_reg(item, W5500_PHYCFGR_REG_0x2E, buf, 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
KIT_MODULE_PRINTF(W5500_PRT_EN, "w5500 connet res %d\r\n", cnt < 100);
|
|
||||||
cnt = 0;
|
|
||||||
//设置网关IP
|
|
||||||
WRITE_LT_INT32U(buf, cnt, gateway_ip);
|
|
||||||
drv_w5500_write_comm_reg(item, W5500_GAR0_REG_0x01, buf, 4);
|
|
||||||
|
|
||||||
//设置子网掩码
|
|
||||||
cnt = 0;
|
|
||||||
WRITE_LT_INT32U(buf, cnt, net_mask);
|
|
||||||
drv_w5500_write_comm_reg(item, W5500_SUBR0_REG_0x05, buf, 4);
|
|
||||||
|
|
||||||
//设置MAC 地址
|
|
||||||
cnt = 0;
|
|
||||||
kit_copy_buf(buf, mac, 6);
|
|
||||||
drv_w5500_write_comm_reg(item, W5500_SHAR0_REG_0x09, buf, 6);
|
|
||||||
|
|
||||||
//设置ip地址
|
|
||||||
cnt = 0;
|
|
||||||
WRITE_LT_INT32U(buf, cnt, ip);
|
|
||||||
drv_w5500_write_comm_reg(item, W5500_SIPR0_REG_0x0F, buf, 4);
|
|
||||||
|
|
||||||
buf[0] = timeout / 200;
|
|
||||||
drv_w5500_write_comm_reg(item, W5500_GAR0_REG_0x01, buf, 1);
|
|
||||||
#ifdef W5500_DEBUG
|
|
||||||
drv_w5500_read_comm_reg(item, W5500_GAR0_REG_0x01, buf, 4 + 4 + 6 + 4);
|
|
||||||
KIT_MODULE_PRINTF(W5500_PRT_EN, "w5500 param:");
|
|
||||||
KIT_PRINTF_U8_BUF(buf, 4 + 4 + 6 + 4);
|
|
||||||
#endif
|
|
||||||
w5500_semaphore = OSSemCreate(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
uint8_t drv_w5500_get_socket_status(W5500Item *item, uint8_t socket)
|
|
||||||
{
|
|
||||||
uint8_t buf[1];
|
|
||||||
uint8_t socket_reg = W5500_CREAT_SOCKET_REG(socket);
|
|
||||||
//读取当前socket状态
|
|
||||||
drv_w5500_read_socket_reg(item, socket_reg, Sn_SR_0x03, buf, 1);
|
|
||||||
|
|
||||||
return buf[0];
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool drv_w5500_close_socket(W5500Item *item, uint8_t socket)
|
////bool drv_w5500_close_socket(W5500Item *item, uint8_t socket)
|
||||||
{
|
////{
|
||||||
bool res = false;
|
//// bool res = false;
|
||||||
uint8_t tmp_buf[1];
|
//// uint8_t tmp_buf[1];
|
||||||
uint32_t cnt;
|
//// uint32_t cnt;
|
||||||
uint8_t socket_reg = W5500_CREAT_SOCKET_REG(socket);
|
//// uint8_t socket_reg = W5500_CREAT_SOCKET_REG(socket);
|
||||||
//读取当前socket状态
|
//// //读取当前socket状态
|
||||||
|
////
|
||||||
if(item->close_call != NULL)
|
//// if(item->close_call != NULL)
|
||||||
{
|
//// {
|
||||||
item->close_call(socket);
|
//// item->close_call(socket);
|
||||||
}
|
//// }
|
||||||
drv_w5500_read_socket_reg(item, socket_reg, Sn_SR_0x03, tmp_buf, 1);
|
//// drv_w5500_read_socket_reg(item, socket_reg, Sn_SR_0x03, tmp_buf, 1);
|
||||||
KIT_MODULE_PRINTF(W5500_PRT_EN, "socket %d close st %x\r\n", socket, tmp_buf[0]);
|
//// KIT_MODULE_PRINTF(W5500_PRT_EN, "socket %d close st %x\r\n", socket, tmp_buf[0]);
|
||||||
if(tmp_buf[0] != SOCK_CLOSED)
|
//// if(tmp_buf[0] != SOCK_CLOSED)
|
||||||
{
|
//// {
|
||||||
tmp_buf[0] = SOCKET_CMD_CLOSE;
|
//// tmp_buf[0] = SOCKET_CMD_CLOSE;
|
||||||
drv_w5500_write_socket_reg(item, socket_reg, Sn_CR_0x01, tmp_buf, 1);
|
//// drv_w5500_write_socket_reg(item, socket_reg, Sn_CR_0x01, tmp_buf, 1);
|
||||||
|
////
|
||||||
cnt = 0;
|
//// cnt = 0;
|
||||||
while((tmp_buf[0] != SOCK_CLOSED) && (cnt++ < 20))
|
//// while((tmp_buf[0] != SOCK_CLOSED) && (cnt++ < 20))
|
||||||
{
|
//// {
|
||||||
drv_w5500_read_socket_reg(item, socket_reg, Sn_SR_0x03, tmp_buf, 1);
|
//// drv_w5500_read_socket_reg(item, socket_reg, Sn_SR_0x03, tmp_buf, 1);
|
||||||
kit_time_dly_ms(1);
|
//// kit_time_dly_ms(1);
|
||||||
}
|
//// }
|
||||||
if(cnt < 20)
|
//// if(cnt < 20)
|
||||||
{
|
//// {
|
||||||
//强制关闭一个socket
|
//// //强制关闭一个socket
|
||||||
tmp_buf[0] = 0;
|
//// tmp_buf[0] = 0;
|
||||||
drv_w5500_write_socket_reg(item, socket_reg, Sn_MR_0x00, tmp_buf, 1);
|
//// drv_w5500_write_socket_reg(item, socket_reg, Sn_MR_0x00, tmp_buf, 1);
|
||||||
//清除socket所有中断
|
//// //清除socket所有中断
|
||||||
tmp_buf[0] = 0xFF;
|
//// tmp_buf[0] = 0xFF;
|
||||||
drv_w5500_write_socket_reg(item, socket_reg, Sn_IR_0x02, tmp_buf, 1);
|
//// drv_w5500_write_socket_reg(item, socket_reg, Sn_IR_0x02, tmp_buf, 1);
|
||||||
//关闭所有中断
|
//// //关闭所有中断
|
||||||
tmp_buf[0] = 0;
|
//// tmp_buf[0] = 0;
|
||||||
drv_w5500_write_socket_reg(item, socket_reg, Sn_IMR_0x2C, tmp_buf, 1);
|
//// drv_w5500_write_socket_reg(item, socket_reg, Sn_IMR_0x2C, tmp_buf, 1);
|
||||||
res = true;
|
//// res = true;
|
||||||
}
|
//// }
|
||||||
}
|
//// }
|
||||||
|
////
|
||||||
return res;
|
//// return res;
|
||||||
}
|
////}
|
||||||
|
|
||||||
|
|
||||||
//MTU
|
////MTU
|
||||||
#define SOCKET_UDP_PACKSIZE 1472 //1-1472
|
//#define SOCKET_UDP_PACKSIZE 1472 //1-1472
|
||||||
#define SOCKET_TCP_PACKSIZE 1460 //1-1460
|
//#define SOCKET_TCP_PACKSIZE 1460 //1-1460
|
||||||
#define SOCKET_PPPOE_PACKSIZE 1464 //1-1464
|
//#define SOCKET_PPPOE_PACKSIZE 1464 //1-1464
|
||||||
#define SOCKET_MACRAW_PACKSIZE 1514 //1-1514
|
//#define SOCKET_MACRAW_PACKSIZE 1514 //1-1514
|
||||||
|
|
||||||
bool drv_w5500_creat_tcp_server(W5500Item *item, uint8_t socket, uint16_t local_port)
|
//bool drv_w5500_creat_tcp_server(W5500Item *item, uint8_t socket, uint16_t local_port)
|
||||||
{
|
|
||||||
uint8_t tmp_buf[4];
|
|
||||||
uint32_t cnt;
|
|
||||||
uint8_t socket_reg = W5500_CREAT_SOCKET_REG(socket);
|
|
||||||
if(socket < W5500_MAX_SOCKET_NUM)
|
|
||||||
{
|
|
||||||
//尝试关闭socket
|
|
||||||
drv_w5500_close_socket(item, socket);
|
|
||||||
kit_time_dly_ms(1);
|
|
||||||
|
|
||||||
//设置位TCP模式 无延时ACK
|
|
||||||
tmp_buf[0] = (SOCKET_TCP & 0x07) | 0x20;
|
|
||||||
drv_w5500_write_socket_reg(item, socket_reg, Sn_MR_0x00, tmp_buf, 1);
|
|
||||||
//设置本地端口号
|
|
||||||
WRITE_BT_INT16U_BY_CONST_POS(tmp_buf, 0, local_port);
|
|
||||||
drv_w5500_write_socket_reg(item, socket_reg, Sn_PORT_0x04, tmp_buf, 2);
|
|
||||||
|
|
||||||
drv_w5500_read_socket_reg(item, socket_reg, Sn_PORT_0x04, tmp_buf, 2);
|
|
||||||
KIT_MODULE_PRINTF(W5500_PRT_EN, "socket %d creat port %d\r\n", socket, READ_BT_INT16U_BY_CONST_POS(tmp_buf, 0));
|
|
||||||
//打开socket
|
|
||||||
tmp_buf[0] = SOCKET_CMD_OPEN;
|
|
||||||
drv_w5500_write_socket_reg(item, socket_reg, Sn_CR_0x01, tmp_buf, 1);
|
|
||||||
|
|
||||||
cnt = 0;
|
|
||||||
while((tmp_buf[0] != SOCK_INIT) && (cnt++ < 50))
|
|
||||||
{
|
|
||||||
drv_w5500_read_socket_reg(item, socket_reg, Sn_SR_0x03, tmp_buf, 1);
|
|
||||||
//KIT_MODULE_PRINTF(W5500_PRT_EN, "socket sr %x\r\n", tmp_buf[0]);
|
|
||||||
kit_time_dly_ms(1);
|
|
||||||
}
|
|
||||||
if(cnt < 50)
|
|
||||||
{
|
|
||||||
//监听socket
|
|
||||||
tmp_buf[0] = SOCKET_CMD_LISTEN;
|
|
||||||
drv_w5500_write_socket_reg(item, socket_reg, Sn_CR_0x01, tmp_buf, 1);
|
|
||||||
|
|
||||||
for(cnt = 0; cnt < 40; cnt++)
|
|
||||||
{
|
|
||||||
drv_w5500_read_socket_reg(item, socket_reg, Sn_SR_0x03, tmp_buf, 1);
|
|
||||||
//KIT_MODULE_PRINTF(W5500_PRT_EN, "socket sr %x\r\n", tmp_buf[0]);
|
|
||||||
if(tmp_buf[0] == SOCK_LISTEN)
|
|
||||||
{
|
|
||||||
//设置MTU
|
|
||||||
WRITE_BT_INT16U_BY_CONST_POS(tmp_buf, 0, SOCKET_TCP_PACKSIZE);
|
|
||||||
drv_w5500_write_socket_reg(item, socket_reg, Sn_MSSR_0x12, tmp_buf, 2);
|
|
||||||
//心跳包间隔
|
|
||||||
tmp_buf[0] = 1;
|
|
||||||
drv_w5500_write_socket_reg(item, socket_reg, Sn_KPALVTR_0x2F, tmp_buf, 1);
|
|
||||||
KIT_MODULE_PRINTF(W5500_PRT_EN, "w5500 server %d register success\r\n", socket);
|
|
||||||
//清除socket所有中断
|
|
||||||
tmp_buf[0] = 0xFF;
|
|
||||||
drv_w5500_write_socket_reg(item, socket_reg, Sn_IR_0x02, tmp_buf, 1);
|
|
||||||
//关闭所有中断
|
|
||||||
tmp_buf[0] = 0xFF;
|
|
||||||
drv_w5500_write_socket_reg(item, socket_reg, Sn_IMR_0x2C, tmp_buf, 1);
|
|
||||||
tmp_buf[0] = 1;
|
|
||||||
drv_w5500_read_socket_reg(item, socket_reg, Sn_IMR_0x2C, tmp_buf, 1);
|
|
||||||
KIT_MODULE_PRINTF(W5500_PRT_EN, "w5500 server %d ir %d \r\n", socket, tmp_buf[0]);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
kit_time_dly_ms(100);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
KIT_MODULE_PRINTF(W5500_PRT_EN, "w5500 server %d register fail\r\n", socket);
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool drv_w5500_read_socket_reg(W5500Item *item, uint8_t ctrl_phase, uint16_t reg, uint8_t *value, uint16_t len)
|
|
||||||
{
|
|
||||||
bool res = false;
|
|
||||||
uint8_t buf[3], err;
|
|
||||||
|
|
||||||
buf[0] = reg >> 8;
|
|
||||||
buf[1] = (uint8_t)reg;
|
|
||||||
buf[2] = ctrl_phase << 3 | W5500_READ_ACCESS_MODE;
|
|
||||||
|
|
||||||
OSSemPend(w5500_semaphore, 500, &err);
|
|
||||||
if(err == OS_ERR_NONE)
|
|
||||||
{
|
|
||||||
drv_gpio_set_pin_status(item->cs, kGpioStatus_Low);
|
|
||||||
res = (drv_spi_series_sync_send_receive(item->spi, buf, 3, value, len) == kKit_Ret_Ok);
|
|
||||||
drv_gpio_set_pin_status(item->cs, kGpioStatus_High);
|
|
||||||
OSSemPost(w5500_semaphore);
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
//len > 实际长度 + 3
|
|
||||||
bool drv_w5500_dma_read_socket_reg(W5500Item *item, uint8_t ctrl_phase, uint16_t reg, uint8_t *value, uint16_t len)
|
|
||||||
{
|
|
||||||
bool res = false;
|
|
||||||
uint32_t i;
|
|
||||||
uint8_t err;
|
|
||||||
|
|
||||||
value[0] = reg >> 8;
|
|
||||||
value[1] = (uint8_t)reg;
|
|
||||||
value[2] = ctrl_phase << 3 | W5500_READ_ACCESS_MODE;
|
|
||||||
|
|
||||||
OSSemPend(w5500_semaphore, 500, &err);
|
|
||||||
if(err == OS_ERR_NONE)
|
|
||||||
{
|
|
||||||
drv_gpio_set_pin_status(item->cs, kGpioStatus_Low);
|
|
||||||
res = (drv_spi_dma_sync_receive(item->spi, value, len + 3) == kKit_Ret_Ok);
|
|
||||||
drv_gpio_set_pin_status(item->cs, kGpioStatus_High);
|
|
||||||
OSSemPost(w5500_semaphore);
|
|
||||||
|
|
||||||
for(i = 0 ; i < len; i++)
|
|
||||||
{
|
|
||||||
value[i] = value[i + 3];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool drv_w5500_write_socket_reg(W5500Item *item, uint8_t ctrl_phase, uint16_t reg, uint8_t *value, uint16_t len)
|
|
||||||
{
|
|
||||||
bool res = false;
|
|
||||||
uint8_t buf[3], err;
|
|
||||||
|
|
||||||
buf[0] = reg >> 8;
|
|
||||||
buf[1] = reg;
|
|
||||||
buf[2] = ctrl_phase << 3 | W5500_WRITE_ACCESS_MODE;
|
|
||||||
|
|
||||||
OSSemPend(w5500_semaphore, 500, &err);
|
|
||||||
if(err == OS_ERR_NONE)
|
|
||||||
{
|
|
||||||
drv_gpio_set_pin_status(item->cs, kGpioStatus_Low);
|
|
||||||
res = (drv_spi_series_sync_send_receive(item->spi, buf, 3, NULL, 0) == kKit_Ret_Ok);
|
|
||||||
res &= (drv_spi_series_sync_send_receive(item->spi, value, len, NULL, 0) == kKit_Ret_Ok);
|
|
||||||
drv_gpio_set_pin_status(item->cs, kGpioStatus_High);
|
|
||||||
|
|
||||||
OSSemPost(w5500_semaphore);
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool drv_w5500_dma_write_socket_reg(W5500Item *item, uint8_t ctrl_phase, uint16_t reg, uint8_t *value, uint16_t len)
|
|
||||||
{
|
|
||||||
bool res = false;
|
|
||||||
uint8_t w5500_send_buf[300], err;
|
|
||||||
if(len + 3 < 300)
|
|
||||||
{
|
|
||||||
w5500_send_buf[0] = reg >> 8;
|
|
||||||
w5500_send_buf[1] = reg;
|
|
||||||
w5500_send_buf[2] = ctrl_phase << 3 | W5500_WRITE_ACCESS_MODE;
|
|
||||||
kit_copy_buf(&w5500_send_buf[3], value, len);
|
|
||||||
|
|
||||||
OSSemPend(w5500_semaphore, 0, &err);
|
|
||||||
drv_gpio_set_pin_status(item->cs, kGpioStatus_Low);
|
|
||||||
res = (drv_spi_dma_sync_send(item->spi, w5500_send_buf, len + 3) == kKit_Ret_Ok);
|
|
||||||
drv_gpio_set_pin_status(item->cs, kGpioStatus_High);
|
|
||||||
OSSemPost(w5500_semaphore);
|
|
||||||
}
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool drv_w5500_read_comm_reg(W5500Item *item, uint16_t reg, uint8_t *value, uint16_t len)
|
|
||||||
{
|
|
||||||
bool res = false;
|
|
||||||
uint8_t buf[3];
|
|
||||||
|
|
||||||
buf[0] = reg >> 8;
|
|
||||||
buf[1] = reg;
|
|
||||||
buf[2] = SELECT_GREG_00 | W5500_READ_ACCESS_MODE;
|
|
||||||
|
|
||||||
drv_gpio_set_pin_status(item->cs, kGpioStatus_Low);
|
|
||||||
res = (drv_spi_series_sync_send_receive(item->spi, buf, 3, value, len) == kKit_Ret_Ok);
|
|
||||||
drv_gpio_set_pin_status(item->cs, kGpioStatus_High);
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool drv_w5500_write_comm_reg(W5500Item *item, uint8_t reg, uint8_t *value, uint16_t len)
|
|
||||||
{
|
|
||||||
bool res = true;
|
|
||||||
uint8_t buf[3];
|
|
||||||
|
|
||||||
buf[0] = reg >> 8;
|
|
||||||
buf[1] = reg;
|
|
||||||
buf[2] = SELECT_GREG_00 | W5500_WRITE_ACCESS_MODE;
|
|
||||||
|
|
||||||
drv_gpio_set_pin_status(item->cs, kGpioStatus_Low);
|
|
||||||
res &= (drv_spi_series_sync_send_receive(item->spi, buf, 3, NULL, 0) == kKit_Ret_Ok);
|
|
||||||
res &= (drv_spi_series_sync_send_receive(item->spi, value, len, NULL, 0) == kKit_Ret_Ok);
|
|
||||||
drv_gpio_set_pin_status(item->cs, kGpioStatus_High);
|
|
||||||
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void drv_w5500_poll(W5500Item *item)
|
|
||||||
{
|
|
||||||
static uint8_t link_off_cnt = 0;
|
|
||||||
uint8_t socket_reg, buf[4];
|
|
||||||
uint16_t addr, len;
|
|
||||||
uint32_t i;
|
|
||||||
|
|
||||||
if((item->rcv_call != NULL) && (item->server_port != NULL))
|
|
||||||
{
|
|
||||||
drv_w5500_read_comm_reg(item, W5500_PHYCFGR_REG_0x2E, buf, 1);
|
|
||||||
if((buf[0] & 0x01) == 0)
|
|
||||||
{
|
|
||||||
buf[1] = (link_off_cnt++ > 10) ? 0x80 : 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
buf[1] = link_off_cnt = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(i = 0; i < W5500_MAX_SOCKET_NUM; i++)
|
|
||||||
{
|
|
||||||
if(buf[1] != 0x80)
|
|
||||||
{
|
|
||||||
socket_reg = W5500_CREAT_SOCKET_REG(i);
|
|
||||||
//读取w5500 socket状态
|
|
||||||
drv_w5500_read_socket_reg(item, socket_reg, Sn_IR_0x02, buf, 2);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
link_off_cnt = 11;
|
|
||||||
}
|
|
||||||
switch(buf[1])
|
|
||||||
{
|
|
||||||
//建立连接后可能存在有通信数据
|
|
||||||
case SOCK_ESTABLISHED:
|
|
||||||
item->close_cnt[i] = 0;
|
|
||||||
drv_w5500_read_socket_reg(item, socket_reg, Sn_RX_RSR_0x26, buf, 4);
|
|
||||||
len = READ_BT_INT16U_BY_CONST_POS(buf, 0);
|
|
||||||
if((len > 0) && (len < W5500_MAX_READ_BUF_SIZE))
|
|
||||||
{
|
|
||||||
//获取地址并读数据
|
|
||||||
addr = READ_BT_INT16U_BY_CONST_POS(buf, 2);
|
|
||||||
drv_w5500_dma_read_socket_reg(item, W5500_CREAT_SOCKET_READ_BUF(i), addr, item->read_buf, len);
|
|
||||||
|
|
||||||
item->rcv_call(i, item->read_buf, len);
|
|
||||||
|
|
||||||
addr += len;
|
|
||||||
WRITE_BT_INT16U_BY_CONST_POS(buf, 0, addr);
|
|
||||||
drv_w5500_write_socket_reg(item, socket_reg, Sn_RX_RD_0x28, buf, 2);
|
|
||||||
|
|
||||||
buf[0] = SOCKET_CMD_RECV;
|
|
||||||
drv_w5500_write_socket_reg(item, socket_reg, Sn_CR_0x01, buf, 1);
|
|
||||||
|
|
||||||
// cnt = buf[0] = 1;
|
|
||||||
// while((buf[0] != 0) && (cnt++ < 4))
|
|
||||||
//{
|
//{
|
||||||
// drv_w5500_read_socket_reg(&w5500, socket_reg, Sn_CR_0x01, buf, 1);
|
// uint8_t tmp_buf[4];
|
||||||
|
// uint32_t cnt;
|
||||||
|
// uint8_t socket_reg = W5500_CREAT_SOCKET_REG(socket);
|
||||||
|
// if(socket < W5500_MAX_SOCKET_NUM)
|
||||||
|
// {
|
||||||
|
// //尝试关闭socket
|
||||||
|
// drv_w5500_close_socket(item, socket);
|
||||||
|
// kit_time_dly_ms(1);
|
||||||
|
//
|
||||||
|
// //设置位TCP模式 无延时ACK
|
||||||
|
// tmp_buf[0] = (SOCKET_TCP & 0x07) | 0x20;
|
||||||
|
// drv_w5500_write_socket_reg(item, socket_reg, Sn_MR_0x00, tmp_buf, 1);
|
||||||
|
// //设置本地端口号
|
||||||
|
// WRITE_BT_INT16U_BY_CONST_POS(tmp_buf, 0, local_port);
|
||||||
|
// drv_w5500_write_socket_reg(item, socket_reg, Sn_PORT_0x04, tmp_buf, 2);
|
||||||
|
//
|
||||||
|
// drv_w5500_read_socket_reg(item, socket_reg, Sn_PORT_0x04, tmp_buf, 2);
|
||||||
|
// KIT_MODULE_PRINTF(W5500_PRT_EN, "socket %d creat port %d\r\n", socket, READ_BT_INT16U_BY_CONST_POS(tmp_buf, 0));
|
||||||
|
// //打开socket
|
||||||
|
// tmp_buf[0] = SOCKET_CMD_OPEN;
|
||||||
|
// drv_w5500_write_socket_reg(item, socket_reg, Sn_CR_0x01, tmp_buf, 1);
|
||||||
|
//
|
||||||
|
// cnt = 0;
|
||||||
|
// while((tmp_buf[0] != SOCK_INIT) && (cnt++ < 50))
|
||||||
|
// {
|
||||||
|
// drv_w5500_read_socket_reg(item, socket_reg, Sn_SR_0x03, tmp_buf, 1);
|
||||||
|
// //KIT_MODULE_PRINTF(W5500_PRT_EN, "socket sr %x\r\n", tmp_buf[0]);
|
||||||
|
// kit_time_dly_ms(1);
|
||||||
|
// }
|
||||||
|
// if(cnt < 50)
|
||||||
|
// {
|
||||||
|
// //监听socket
|
||||||
|
// tmp_buf[0] = SOCKET_CMD_LISTEN;
|
||||||
|
// drv_w5500_write_socket_reg(item, socket_reg, Sn_CR_0x01, tmp_buf, 1);
|
||||||
|
//
|
||||||
|
// for(cnt = 0; cnt < 40; cnt++)
|
||||||
|
// {
|
||||||
|
// drv_w5500_read_socket_reg(item, socket_reg, Sn_SR_0x03, tmp_buf, 1);
|
||||||
|
// //KIT_MODULE_PRINTF(W5500_PRT_EN, "socket sr %x\r\n", tmp_buf[0]);
|
||||||
|
// if(tmp_buf[0] == SOCK_LISTEN)
|
||||||
|
// {
|
||||||
|
// //设置MTU
|
||||||
|
// WRITE_BT_INT16U_BY_CONST_POS(tmp_buf, 0, SOCKET_TCP_PACKSIZE);
|
||||||
|
// drv_w5500_write_socket_reg(item, socket_reg, Sn_MSSR_0x12, tmp_buf, 2);
|
||||||
|
// //心跳包间隔
|
||||||
|
// tmp_buf[0] = 1;
|
||||||
|
// drv_w5500_write_socket_reg(item, socket_reg, Sn_KPALVTR_0x2F, tmp_buf, 1);
|
||||||
|
// KIT_MODULE_PRINTF(W5500_PRT_EN, "w5500 server %d register success\r\n", socket);
|
||||||
|
// //清除socket所有中断
|
||||||
|
// tmp_buf[0] = 0xFF;
|
||||||
|
// drv_w5500_write_socket_reg(item, socket_reg, Sn_IR_0x02, tmp_buf, 1);
|
||||||
|
// //关闭所有中断
|
||||||
|
// tmp_buf[0] = 0xFF;
|
||||||
|
// drv_w5500_write_socket_reg(item, socket_reg, Sn_IMR_0x2C, tmp_buf, 1);
|
||||||
|
// tmp_buf[0] = 1;
|
||||||
|
// drv_w5500_read_socket_reg(item, socket_reg, Sn_IMR_0x2C, tmp_buf, 1);
|
||||||
|
// KIT_MODULE_PRINTF(W5500_PRT_EN, "w5500 server %d ir %d \r\n", socket, tmp_buf[0]);
|
||||||
|
// return true;
|
||||||
|
// }
|
||||||
|
// kit_time_dly_ms(100);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// KIT_MODULE_PRINTF(W5500_PRT_EN, "w5500 server %d register fail\r\n", socket);
|
||||||
|
// return false;
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
//bool drv_w5500_read_socket_reg(W5500Item *item, uint8_t ctrl_phase, uint16_t reg, uint8_t *value, uint16_t len)
|
||||||
|
//{
|
||||||
|
// bool res = false;
|
||||||
|
// uint8_t buf[3], err;
|
||||||
|
//
|
||||||
|
// buf[0] = reg >> 8;
|
||||||
|
// buf[1] = (uint8_t)reg;
|
||||||
|
// buf[2] = ctrl_phase << 3 | W5500_READ_ACCESS_MODE;
|
||||||
|
|
||||||
|
// OSSemPend(w5500_semaphore, 500, &err);
|
||||||
|
// if(err == OS_ERR_NONE)
|
||||||
|
// {
|
||||||
|
// drv_gpio_set_pin_status(item->cs, kGpioStatus_Low);
|
||||||
|
// res = (drv_spi_series_sync_send_receive(item->spi, buf, 3, value, len) == kKit_Ret_Ok);
|
||||||
|
// drv_gpio_set_pin_status(item->cs, kGpioStatus_High);
|
||||||
|
// OSSemPost(w5500_semaphore);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return res;
|
||||||
|
//}
|
||||||
|
|
||||||
|
////len > 实际长度 + 3
|
||||||
|
//bool drv_w5500_dma_read_socket_reg(W5500Item *item, uint8_t ctrl_phase, uint16_t reg, uint8_t *value, uint16_t len)
|
||||||
|
//{
|
||||||
|
// bool res = false;
|
||||||
|
// uint32_t i;
|
||||||
|
// uint8_t err;
|
||||||
|
//
|
||||||
|
// value[0] = reg >> 8;
|
||||||
|
// value[1] = (uint8_t)reg;
|
||||||
|
// value[2] = ctrl_phase << 3 | W5500_READ_ACCESS_MODE;
|
||||||
|
|
||||||
|
// OSSemPend(w5500_semaphore, 500, &err);
|
||||||
|
// if(err == OS_ERR_NONE)
|
||||||
|
// {
|
||||||
|
// drv_gpio_set_pin_status(item->cs, kGpioStatus_Low);
|
||||||
|
// res = (drv_spi_dma_sync_receive(item->spi, value, len + 3) == kKit_Ret_Ok);
|
||||||
|
// drv_gpio_set_pin_status(item->cs, kGpioStatus_High);
|
||||||
|
// OSSemPost(w5500_semaphore);
|
||||||
|
//
|
||||||
|
// for(i = 0 ; i < len; i++)
|
||||||
|
// {
|
||||||
|
// value[i] = value[i + 3];
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// return res;
|
||||||
|
//}
|
||||||
|
|
||||||
|
//bool drv_w5500_write_socket_reg(W5500Item *item, uint8_t ctrl_phase, uint16_t reg, uint8_t *value, uint16_t len)
|
||||||
|
//{
|
||||||
|
// bool res = false;
|
||||||
|
// uint8_t buf[3], err;
|
||||||
|
//
|
||||||
|
// buf[0] = reg >> 8;
|
||||||
|
// buf[1] = reg;
|
||||||
|
// buf[2] = ctrl_phase << 3 | W5500_WRITE_ACCESS_MODE;
|
||||||
|
|
||||||
|
// OSSemPend(w5500_semaphore, 500, &err);
|
||||||
|
// if(err == OS_ERR_NONE)
|
||||||
|
// {
|
||||||
|
// drv_gpio_set_pin_status(item->cs, kGpioStatus_Low);
|
||||||
|
// res = (drv_spi_series_sync_send_receive(item->spi, buf, 3, NULL, 0) == kKit_Ret_Ok);
|
||||||
|
// res &= (drv_spi_series_sync_send_receive(item->spi, value, len, NULL, 0) == kKit_Ret_Ok);
|
||||||
|
// drv_gpio_set_pin_status(item->cs, kGpioStatus_High);
|
||||||
|
//
|
||||||
|
// OSSemPost(w5500_semaphore);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return res;
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//bool drv_w5500_dma_write_socket_reg(W5500Item *item, uint8_t ctrl_phase, uint16_t reg, uint8_t *value, uint16_t len)
|
||||||
|
//{
|
||||||
|
// bool res = false;
|
||||||
|
// uint8_t w5500_send_buf[300], err;
|
||||||
|
// if(len + 3 < 300)
|
||||||
|
// {
|
||||||
|
// w5500_send_buf[0] = reg >> 8;
|
||||||
|
// w5500_send_buf[1] = reg;
|
||||||
|
// w5500_send_buf[2] = ctrl_phase << 3 | W5500_WRITE_ACCESS_MODE;
|
||||||
|
// kit_copy_buf(&w5500_send_buf[3], value, len);
|
||||||
|
//
|
||||||
|
// OSSemPend(w5500_semaphore, 0, &err);
|
||||||
|
// drv_gpio_set_pin_status(item->cs, kGpioStatus_Low);
|
||||||
|
// res = (drv_spi_dma_sync_send(item->spi, w5500_send_buf, len + 3) == kKit_Ret_Ok);
|
||||||
|
// drv_gpio_set_pin_status(item->cs, kGpioStatus_High);
|
||||||
|
// OSSemPost(w5500_semaphore);
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// return res;
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
//bool drv_w5500_read_comm_reg(W5500Item *item, uint16_t reg, uint8_t *value, uint16_t len)
|
||||||
|
//{
|
||||||
|
// bool res = false;
|
||||||
|
// uint8_t buf[3];
|
||||||
|
//
|
||||||
|
// buf[0] = reg >> 8;
|
||||||
|
// buf[1] = reg;
|
||||||
|
// buf[2] = SELECT_GREG_00 | W5500_READ_ACCESS_MODE;
|
||||||
|
|
||||||
|
// drv_gpio_set_pin_status(item->cs, kGpioStatus_Low);
|
||||||
|
// res = (drv_spi_series_sync_send_receive(item->spi, buf, 3, value, len) == kKit_Ret_Ok);
|
||||||
|
// drv_gpio_set_pin_status(item->cs, kGpioStatus_High);
|
||||||
|
//
|
||||||
|
// return res;
|
||||||
|
//}
|
||||||
|
|
||||||
|
//bool drv_w5500_write_comm_reg(W5500Item *item, uint8_t reg, uint8_t *value, uint16_t len)
|
||||||
|
//{
|
||||||
|
// bool res = true;
|
||||||
|
// uint8_t buf[3];
|
||||||
|
//
|
||||||
|
// buf[0] = reg >> 8;
|
||||||
|
// buf[1] = reg;
|
||||||
|
// buf[2] = SELECT_GREG_00 | W5500_WRITE_ACCESS_MODE;
|
||||||
|
|
||||||
|
// drv_gpio_set_pin_status(item->cs, kGpioStatus_Low);
|
||||||
|
// res &= (drv_spi_series_sync_send_receive(item->spi, buf, 3, NULL, 0) == kKit_Ret_Ok);
|
||||||
|
// res &= (drv_spi_series_sync_send_receive(item->spi, value, len, NULL, 0) == kKit_Ret_Ok);
|
||||||
|
// drv_gpio_set_pin_status(item->cs, kGpioStatus_High);
|
||||||
|
//
|
||||||
|
// return res;
|
||||||
|
//}
|
||||||
|
|
||||||
|
|
||||||
|
//void drv_w5500_poll(W5500Item *item)
|
||||||
|
//{
|
||||||
|
// static uint8_t link_off_cnt = 0;
|
||||||
|
// uint8_t socket_reg, buf[4];
|
||||||
|
// uint16_t addr, len;
|
||||||
|
// uint32_t i;
|
||||||
|
|
||||||
|
// if((item->rcv_call != NULL) && (item->server_port != NULL))
|
||||||
|
// {
|
||||||
|
// drv_w5500_read_comm_reg(item, W5500_PHYCFGR_REG_0x2E, buf, 1);
|
||||||
|
// if((buf[0] & 0x01) == 0)
|
||||||
|
// {
|
||||||
|
// buf[1] = (link_off_cnt++ > 10) ? 0x80 : 0;
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// buf[1] = link_off_cnt = 0;
|
||||||
|
// }
|
||||||
|
|
||||||
|
// for(i = 0; i < W5500_MAX_SOCKET_NUM; i++)
|
||||||
|
// {
|
||||||
|
// if(buf[1] != 0x80)
|
||||||
|
// {
|
||||||
|
// socket_reg = W5500_CREAT_SOCKET_REG(i);
|
||||||
|
// //读取w5500 socket状态
|
||||||
|
// drv_w5500_read_socket_reg(item, socket_reg, Sn_IR_0x02, buf, 2);
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// link_off_cnt = 11;
|
||||||
|
// }
|
||||||
|
// switch(buf[1])
|
||||||
|
// {
|
||||||
|
// //建立连接后可能存在有通信数据
|
||||||
|
// case SOCK_ESTABLISHED:
|
||||||
|
// item->close_cnt[i] = 0;
|
||||||
|
// drv_w5500_read_socket_reg(item, socket_reg, Sn_RX_RSR_0x26, buf, 4);
|
||||||
|
// len = READ_BT_INT16U_BY_CONST_POS(buf, 0);
|
||||||
|
// if((len > 0) && (len < W5500_MAX_READ_BUF_SIZE))
|
||||||
|
// {
|
||||||
|
// //获取地址并读数据
|
||||||
|
// addr = READ_BT_INT16U_BY_CONST_POS(buf, 2);
|
||||||
|
// drv_w5500_dma_read_socket_reg(item, W5500_CREAT_SOCKET_READ_BUF(i), addr, item->read_buf, len);
|
||||||
|
//
|
||||||
|
// item->rcv_call(i, item->read_buf, len);
|
||||||
|
//
|
||||||
|
// addr += len;
|
||||||
|
// WRITE_BT_INT16U_BY_CONST_POS(buf, 0, addr);
|
||||||
|
// drv_w5500_write_socket_reg(item, socket_reg, Sn_RX_RD_0x28, buf, 2);
|
||||||
|
//
|
||||||
|
// buf[0] = SOCKET_CMD_RECV;
|
||||||
|
// drv_w5500_write_socket_reg(item, socket_reg, Sn_CR_0x01, buf, 1);
|
||||||
|
//
|
||||||
|
//// cnt = buf[0] = 1;
|
||||||
|
//// while((buf[0] != 0) && (cnt++ < 4))
|
||||||
|
//// {
|
||||||
|
//// drv_w5500_read_socket_reg(&w5500, socket_reg, Sn_CR_0x01, buf, 1);
|
||||||
|
//// }
|
||||||
|
// }
|
||||||
|
// break;
|
||||||
|
// case SOCK_CLOSED:
|
||||||
|
// case SOCK_CLOSE_WAIT:
|
||||||
|
// if(item->close_cnt[i]++ >= 5)
|
||||||
|
// {
|
||||||
|
// if((buf[0] & 0x08) == 0x08)
|
||||||
|
// {
|
||||||
|
// buf[0] = 0x08;
|
||||||
|
// item->close_cnt[i] = 0;
|
||||||
|
// drv_w5500_write_socket_reg(item, socket_reg, Sn_IR_0x02, buf, 1);
|
||||||
|
// }
|
||||||
|
// else
|
||||||
|
// {
|
||||||
|
// drv_w5500_close_socket(item, i);
|
||||||
|
// drv_w5500_creat_tcp_server(item, i, item->server_port[i]);
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// break;
|
||||||
|
//
|
||||||
|
// case SOCK_LISTEN:
|
||||||
|
// item->close_cnt[i] = 0;
|
||||||
|
// break;
|
||||||
|
// case 0x80:
|
||||||
|
// drv_w5500_close_socket(item, i);
|
||||||
|
// break;
|
||||||
|
// default :
|
||||||
|
//
|
||||||
|
// break;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//}
|
||||||
|
|
||||||
|
//void drv_w5500_set_close_call(W5500Item *item, W5500CloseCall call)
|
||||||
|
//{
|
||||||
|
// item->close_call = call;
|
||||||
//}
|
//}
|
||||||
}
|
|
||||||
break;
|
|
||||||
case SOCK_CLOSED:
|
|
||||||
case SOCK_CLOSE_WAIT:
|
|
||||||
if(item->close_cnt[i]++ >= 5)
|
|
||||||
{
|
|
||||||
if((buf[0] & 0x08) == 0x08)
|
|
||||||
{
|
|
||||||
buf[0] = 0x08;
|
|
||||||
item->close_cnt[i] = 0;
|
|
||||||
drv_w5500_write_socket_reg(item, socket_reg, Sn_IR_0x02, buf, 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
drv_w5500_close_socket(item, i);
|
|
||||||
drv_w5500_creat_tcp_server(item, i, item->server_port[i]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SOCK_LISTEN:
|
|
||||||
item->close_cnt[i] = 0;
|
|
||||||
break;
|
|
||||||
case 0x80:
|
|
||||||
drv_w5500_close_socket(item, i);
|
|
||||||
break;
|
|
||||||
default :
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void drv_w5500_set_close_call(W5500Item *item, W5500CloseCall call)
|
|
||||||
{
|
|
||||||
item->close_call = call;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,214 +1,214 @@
|
||||||
/******************************************************************************
|
///******************************************************************************
|
||||||
* @file drv_w5500.h
|
// * @file drv_w5500.h
|
||||||
* @brief w5500 drivers
|
// * @brief w5500 drivers
|
||||||
* @version V1.0
|
// * @version V1.0
|
||||||
* @author Gary
|
// * @author Gary
|
||||||
* @copyright
|
// * @copyright
|
||||||
******************************************************************************/
|
// ******************************************************************************/
|
||||||
#ifndef DRV_W5500_H_
|
//#ifndef DRV_W5500_H_
|
||||||
#define DRV_W5500_H_
|
//#define DRV_W5500_H_
|
||||||
|
|
||||||
#include <stdint.h>
|
//#include <stdint.h>
|
||||||
#include "drv_spi.h"
|
//#include "drv_spi.h"
|
||||||
|
|
||||||
#define W5500_PRT_EN false
|
//#define W5500_PRT_EN false
|
||||||
#define W5500_READ_ACCESS_MODE (0u)
|
//#define W5500_READ_ACCESS_MODE (0u)
|
||||||
#define W5500_WRITE_ACCESS_MODE (4u)
|
//#define W5500_WRITE_ACCESS_MODE (4u)
|
||||||
#define W5500_MAX_SOCKET_NUM (8u)
|
//#define W5500_MAX_SOCKET_NUM (8u)
|
||||||
#define W5500_MAX_READ_BUF_SIZE (2048u)
|
//#define W5500_MAX_READ_BUF_SIZE (2048u)
|
||||||
#define W5500_CREAT_SOCKET_REG(socket) ((socket) << 2 | 0x01)
|
//#define W5500_CREAT_SOCKET_REG(socket) ((socket) << 2 | 0x01)
|
||||||
#define W5500_CREAT_SOCKET_WRITE_BUF(socket) ((socket) << 2 | 0x02)
|
//#define W5500_CREAT_SOCKET_WRITE_BUF(socket) ((socket) << 2 | 0x02)
|
||||||
#define W5500_CREAT_SOCKET_READ_BUF(socket) ((socket) << 2 | 0x03)
|
//#define W5500_CREAT_SOCKET_READ_BUF(socket) ((socket) << 2 | 0x03)
|
||||||
|
|
||||||
#define Sn_IR_SEND_OK 0x10 /**< complete sending */
|
//#define Sn_IR_SEND_OK 0x10 /**< complete sending */
|
||||||
|
|
||||||
|
|
||||||
//寄存器选择定义
|
////寄存器选择定义
|
||||||
typedef enum
|
//typedef enum
|
||||||
{
|
//{
|
||||||
SELECT_GREG_00 = 0, //通用寄存器
|
// SELECT_GREG_00 = 0, //通用寄存器
|
||||||
SELECT_SECKET0_01 = 1, //socket0寄存器
|
// SELECT_SECKET0_01 = 1, //socket0寄存器
|
||||||
SELECT_SECKET1_05 = 5, //socket1寄存器
|
// SELECT_SECKET1_05 = 5, //socket1寄存器
|
||||||
SELECT_SECKET2_09 = 9, //socket2寄存器
|
// SELECT_SECKET2_09 = 9, //socket2寄存器
|
||||||
SELECT_SECKET3_13 = 13, //socket3寄存器
|
// SELECT_SECKET3_13 = 13, //socket3寄存器
|
||||||
SELECT_SECKET4_17 = 17, //socket4寄存器
|
// SELECT_SECKET4_17 = 17, //socket4寄存器
|
||||||
SELECT_SECKET5_21 = 21, //socket5寄存器
|
// SELECT_SECKET5_21 = 21, //socket5寄存器
|
||||||
SELECT_SECKET6_25 = 25, //socket6寄存器
|
// SELECT_SECKET6_25 = 25, //socket6寄存器
|
||||||
SELECT_SECKET7_29 = 29, //socket7寄存器
|
// SELECT_SECKET7_29 = 29, //socket7寄存器
|
||||||
SELECT_SECKET0_TXREG_02 = 2, //socket0发送缓冲区
|
// SELECT_SECKET0_TXREG_02 = 2, //socket0发送缓冲区
|
||||||
SELECT_SECKET1_TXREG_06 = 6, //socket0发送缓冲区
|
// SELECT_SECKET1_TXREG_06 = 6, //socket0发送缓冲区
|
||||||
SELECT_SECKET2_TXREG_10 = 10, //socket0发送缓冲区
|
// SELECT_SECKET2_TXREG_10 = 10, //socket0发送缓冲区
|
||||||
SELECT_SECKET3_TXREG_14 = 14, //socket0发送缓冲区
|
// SELECT_SECKET3_TXREG_14 = 14, //socket0发送缓冲区
|
||||||
SELECT_SECKET4_TXREG_18 = 18, //socket0发送缓冲区
|
// SELECT_SECKET4_TXREG_18 = 18, //socket0发送缓冲区
|
||||||
SELECT_SECKET5_TXREG_22 = 22, //socket0发送缓冲区
|
// SELECT_SECKET5_TXREG_22 = 22, //socket0发送缓冲区
|
||||||
SELECT_SECKET6_TXREG_26 = 26, //socket0发送缓冲区
|
// SELECT_SECKET6_TXREG_26 = 26, //socket0发送缓冲区
|
||||||
SELECT_SECKET7_TXREG_30 = 30, //socket0发送缓冲区
|
// SELECT_SECKET7_TXREG_30 = 30, //socket0发送缓冲区
|
||||||
SELECT_SECKET0_RXREG_03 = 3, //socket0接收缓冲区
|
// SELECT_SECKET0_RXREG_03 = 3, //socket0接收缓冲区
|
||||||
SELECT_SECKET1_RXREG_07 = 7, //socket0接收缓冲区
|
// SELECT_SECKET1_RXREG_07 = 7, //socket0接收缓冲区
|
||||||
SELECT_SECKET2_RXREG_11 = 11, //socket0接收缓冲区
|
// SELECT_SECKET2_RXREG_11 = 11, //socket0接收缓冲区
|
||||||
SELECT_SECKET3_RXREG_15 = 15, //socket0接收缓冲区
|
// SELECT_SECKET3_RXREG_15 = 15, //socket0接收缓冲区
|
||||||
SELECT_SECKET4_RXREG_19 = 19, //socket0接收缓冲区
|
// SELECT_SECKET4_RXREG_19 = 19, //socket0接收缓冲区
|
||||||
SELECT_SECKET5_RXREG_23 = 23, //socket0接收缓冲区
|
// SELECT_SECKET5_RXREG_23 = 23, //socket0接收缓冲区
|
||||||
SELECT_SECKET6_RXREG_27 = 27, //socket0接收缓冲区
|
// SELECT_SECKET6_RXREG_27 = 27, //socket0接收缓冲区
|
||||||
SELECT_SECKET7_RXREG_31 = 31, //socket0接收缓冲区
|
// SELECT_SECKET7_RXREG_31 = 31, //socket0接收缓冲区
|
||||||
}W5500_BLOCK_SELECT;
|
//}W5500_BLOCK_SELECT;
|
||||||
|
|
||||||
//通用寄存器地址定义
|
////通用寄存器地址定义
|
||||||
typedef enum
|
//typedef enum
|
||||||
{
|
//{
|
||||||
W5500_MODE_REG_0x00 = 0x0000, //模式寄存器
|
// W5500_MODE_REG_0x00 = 0x0000, //模式寄存器
|
||||||
W5500_GAR0_REG_0x01 = 0x0001, //网关地址字节1
|
// W5500_GAR0_REG_0x01 = 0x0001, //网关地址字节1
|
||||||
W5500_GAR1_REG_0x02 = 0x0002, //网关地址字节2
|
// W5500_GAR1_REG_0x02 = 0x0002, //网关地址字节2
|
||||||
W5500_GAR2_REG_0x03 = 0x0003, //网关地址字节3
|
// W5500_GAR2_REG_0x03 = 0x0003, //网关地址字节3
|
||||||
W5500_GAR3_REG_0x04 = 0x0004, //网关地址字节4
|
// W5500_GAR3_REG_0x04 = 0x0004, //网关地址字节4
|
||||||
W5500_SUBR0_REG_0x05 = 0x0005, //子网掩码字节1
|
// W5500_SUBR0_REG_0x05 = 0x0005, //子网掩码字节1
|
||||||
W5500_SUBR1_REG_0x06 = 0x0006, //子网掩码字节2
|
// W5500_SUBR1_REG_0x06 = 0x0006, //子网掩码字节2
|
||||||
W5500_SUBR2_REG_0x07 = 0x0007, //子网掩码字节3
|
// W5500_SUBR2_REG_0x07 = 0x0007, //子网掩码字节3
|
||||||
W5500_SUBR3_REG_0x08 = 0x0008, //子网掩码字节4
|
// W5500_SUBR3_REG_0x08 = 0x0008, //子网掩码字节4
|
||||||
W5500_SHAR0_REG_0x09 = 0x0009, //MAC硬件地址字节1
|
// W5500_SHAR0_REG_0x09 = 0x0009, //MAC硬件地址字节1
|
||||||
W5500_SHAR1_REG_0x0A = 0x000A, //MAC硬件地址字节2
|
// W5500_SHAR1_REG_0x0A = 0x000A, //MAC硬件地址字节2
|
||||||
W5500_SHAR2_REG_0x0B = 0x000B, //MAC硬件地址字节3
|
// W5500_SHAR2_REG_0x0B = 0x000B, //MAC硬件地址字节3
|
||||||
W5500_SHAR3_REG_0x0C = 0x000C, //MAC硬件地址字节4
|
// W5500_SHAR3_REG_0x0C = 0x000C, //MAC硬件地址字节4
|
||||||
W5500_SHAR4_REG_0x0D = 0x000D, //MAC硬件地址字节5
|
// W5500_SHAR4_REG_0x0D = 0x000D, //MAC硬件地址字节5
|
||||||
W5500_SHAR5_REG_0x0E = 0x000E, //MAC硬件地址字节6
|
// W5500_SHAR5_REG_0x0E = 0x000E, //MAC硬件地址字节6
|
||||||
W5500_SIPR0_REG_0x0F = 0x000F, //本地IP字节1
|
// W5500_SIPR0_REG_0x0F = 0x000F, //本地IP字节1
|
||||||
W5500_SIPR1_REG_0x10 = 0x0010, //本地IP字节2
|
// W5500_SIPR1_REG_0x10 = 0x0010, //本地IP字节2
|
||||||
W5500_SIPR2_REG_0x11 = 0x0011, //本地IP字节3
|
// W5500_SIPR2_REG_0x11 = 0x0011, //本地IP字节3
|
||||||
W5500_SIPR3_REG_0x12 = 0x0012, //本地IP字节4
|
// W5500_SIPR3_REG_0x12 = 0x0012, //本地IP字节4
|
||||||
W5500_INTLEVEL0_REG_0x13 = 0x0013, //低电平中断定时器寄存器-高字节
|
// W5500_INTLEVEL0_REG_0x13 = 0x0013, //低电平中断定时器寄存器-高字节
|
||||||
W5500_INTLEVEL1_REG_0x14 = 0x0014, //低电平中断定时器寄存器-低字节
|
// W5500_INTLEVEL1_REG_0x14 = 0x0014, //低电平中断定时器寄存器-低字节
|
||||||
W5500_IR_REG_0x15 = 0x0015, //中断寄存器
|
// W5500_IR_REG_0x15 = 0x0015, //中断寄存器
|
||||||
W5500_IMR_REG_0x16 = 0x0016, //中断 屏蔽 寄存器
|
// W5500_IMR_REG_0x16 = 0x0016, //中断 屏蔽 寄存器
|
||||||
W5500_SIR_REG_0x17 = 0x0017, //Socket 中断寄存器
|
// W5500_SIR_REG_0x17 = 0x0017, //Socket 中断寄存器
|
||||||
W5500_SIMR_REG_0x18 = 0x0018, //Socket 中断屏蔽寄存器
|
// W5500_SIMR_REG_0x18 = 0x0018, //Socket 中断屏蔽寄存器
|
||||||
W5500_RTR0_REG_0x19 = 0x0019, //重试时间值寄存器-高字节
|
// W5500_RTR0_REG_0x19 = 0x0019, //重试时间值寄存器-高字节
|
||||||
W5500_RTR1_REG_0x1A = 0x001A, //重试时间值寄存器-低字节
|
// W5500_RTR1_REG_0x1A = 0x001A, //重试时间值寄存器-低字节
|
||||||
W5500_RCR_REG_0x1B = 0x001B, //重试计数器
|
// W5500_RCR_REG_0x1B = 0x001B, //重试计数器
|
||||||
W5500_PTIMER_REG_0x1C = 0x001C, //PPP连接控制协议请求定时寄存器
|
// W5500_PTIMER_REG_0x1C = 0x001C, //PPP连接控制协议请求定时寄存器
|
||||||
W5500_PMAGIC_REG_0x1D = 0x001D, //PPP连接控制协议幻数寄存器
|
// W5500_PMAGIC_REG_0x1D = 0x001D, //PPP连接控制协议幻数寄存器
|
||||||
W5500_PHAR0_REG_0x1E = 0x001E, //PPPoE 模式下目标 MAC 寄存器
|
// W5500_PHAR0_REG_0x1E = 0x001E, //PPPoE 模式下目标 MAC 寄存器
|
||||||
W5500_PHAR1_REG_0x1F = 0x001F, //PPPoE 模式下目标 MAC 寄存器
|
// W5500_PHAR1_REG_0x1F = 0x001F, //PPPoE 模式下目标 MAC 寄存器
|
||||||
W5500_PHAR2_REG_0x20 = 0x0020, //PPPoE 模式下目标 MAC 寄存器
|
// W5500_PHAR2_REG_0x20 = 0x0020, //PPPoE 模式下目标 MAC 寄存器
|
||||||
W5500_PHAR3_REG_0x21 = 0x0021, //PPPoE 模式下目标 MAC 寄存器
|
// W5500_PHAR3_REG_0x21 = 0x0021, //PPPoE 模式下目标 MAC 寄存器
|
||||||
W5500_PHAR4_REG_0x22 = 0x0022, //PPPoE 模式下目标 MAC 寄存器
|
// W5500_PHAR4_REG_0x22 = 0x0022, //PPPoE 模式下目标 MAC 寄存器
|
||||||
W5500_PHAR5_REG_0x23 = 0x0023, //PPPoE 模式下目标 MAC 寄存器
|
// W5500_PHAR5_REG_0x23 = 0x0023, //PPPoE 模式下目标 MAC 寄存器
|
||||||
W5500_PSID0_REG_0x24 = 0x0024, //PPPoE 模式下会话 ID 寄存器
|
// W5500_PSID0_REG_0x24 = 0x0024, //PPPoE 模式下会话 ID 寄存器
|
||||||
W5500_PSID1_REG_0x25 = 0x0025, //PPPoE 模式下会话 ID 寄存器
|
// W5500_PSID1_REG_0x25 = 0x0025, //PPPoE 模式下会话 ID 寄存器
|
||||||
W5500_PMRU0_REG_0x26 = 0x0026, //PPPoE模式下最大接收单元
|
// W5500_PMRU0_REG_0x26 = 0x0026, //PPPoE模式下最大接收单元
|
||||||
W5500_PMRU1_REG_0x27 = 0x0027, //PPPoE模式下最大接收单元
|
// W5500_PMRU1_REG_0x27 = 0x0027, //PPPoE模式下最大接收单元
|
||||||
W5500_UIPR0_REG_0x28 = 0x0028, //无法抵达 IP 地址寄存器
|
// W5500_UIPR0_REG_0x28 = 0x0028, //无法抵达 IP 地址寄存器
|
||||||
W5500_UIPR1_REG_0x28 = 0x0029, //无法抵达 IP 地址寄存器
|
// W5500_UIPR1_REG_0x28 = 0x0029, //无法抵达 IP 地址寄存器
|
||||||
W5500_UIPR2_REG_0x2A = 0x002A, //无法抵达 IP 地址寄存器
|
// W5500_UIPR2_REG_0x2A = 0x002A, //无法抵达 IP 地址寄存器
|
||||||
W5500_UIPR3_REG_0x2B = 0x002B, //无法抵达 IP 地址寄存器
|
// W5500_UIPR3_REG_0x2B = 0x002B, //无法抵达 IP 地址寄存器
|
||||||
W5500_UPORTR0_REG_0x2C = 0x002C, //无法抵达 端口 地址寄存器
|
// W5500_UPORTR0_REG_0x2C = 0x002C, //无法抵达 端口 地址寄存器
|
||||||
W5500_UPORTR1_REG_0x2D = 0x002D, //无法抵达 端口 地址寄存器
|
// W5500_UPORTR1_REG_0x2D = 0x002D, //无法抵达 端口 地址寄存器
|
||||||
W5500_PHYCFGR_REG_0x2E = 0x002E, //W5500 PHY 配置寄 存器
|
// W5500_PHYCFGR_REG_0x2E = 0x002E, //W5500 PHY 配置寄 存器
|
||||||
W5500_VERSIONR_REG_0x39 = 0x0039, //芯片版本信息,默认为0x04
|
// W5500_VERSIONR_REG_0x39 = 0x0039, //芯片版本信息,默认为0x04
|
||||||
}W5500_REG_ADDR;
|
//}W5500_REG_ADDR;
|
||||||
|
|
||||||
//socket n寄存器
|
////socket n寄存器
|
||||||
typedef enum
|
//typedef enum
|
||||||
{
|
//{
|
||||||
Sn_MR_0x00 = 0x0000, //模式寄存器
|
// Sn_MR_0x00 = 0x0000, //模式寄存器
|
||||||
Sn_CR_0x01 = 0x0001, //配置寄存器
|
// Sn_CR_0x01 = 0x0001, //配置寄存器
|
||||||
Sn_IR_0x02 = 0X0002, //中断寄存器
|
// Sn_IR_0x02 = 0X0002, //中断寄存器
|
||||||
Sn_SR_0x03 = 0X0003, //状态寄存器
|
// Sn_SR_0x03 = 0X0003, //状态寄存器
|
||||||
Sn_PORT_0x04 = 0X0004, //源端口寄存器
|
// Sn_PORT_0x04 = 0X0004, //源端口寄存器
|
||||||
Sn_DHAR_0x06 = 0X0006, //目的MAC地址寄存器
|
// Sn_DHAR_0x06 = 0X0006, //目的MAC地址寄存器
|
||||||
Sn_DIPR_0x0C = 0X000C, //目标IP地址寄存器
|
// Sn_DIPR_0x0C = 0X000C, //目标IP地址寄存器
|
||||||
Sn_DPORT_0x10 = 0X0010, //目标端口寄存器
|
// Sn_DPORT_0x10 = 0X0010, //目标端口寄存器
|
||||||
Sn_MSSR_0x12 = 0X0012, //最大分段寄存器
|
// Sn_MSSR_0x12 = 0X0012, //最大分段寄存器
|
||||||
Sn_TOS_0x15 = 0X0015, //服务类型寄存器
|
// Sn_TOS_0x15 = 0X0015, //服务类型寄存器
|
||||||
Sn_TTL_0x16 = 0X0016, //生存时间寄存器
|
// Sn_TTL_0x16 = 0X0016, //生存时间寄存器
|
||||||
Sn_RXBUFF_SIZE_0x1E = 0X001E, //接收缓冲区大小寄存器
|
// Sn_RXBUFF_SIZE_0x1E = 0X001E, //接收缓冲区大小寄存器
|
||||||
Sn_TXBUFF_SIZE_0x1F = 0X001F, //发送缓冲区大小寄存器
|
// Sn_TXBUFF_SIZE_0x1F = 0X001F, //发送缓冲区大小寄存器
|
||||||
Sn_TX_FSR_0x20 = 0X0020, //空闲发送缓存寄存器
|
// Sn_TX_FSR_0x20 = 0X0020, //空闲发送缓存寄存器
|
||||||
Sn_TX_RD_0x22 = 0X0022, //发送读指针寄存器
|
// Sn_TX_RD_0x22 = 0X0022, //发送读指针寄存器
|
||||||
Sn_TX_WR_0x24 = 0X0024, //发送写指针寄存器
|
// Sn_TX_WR_0x24 = 0X0024, //发送写指针寄存器
|
||||||
Sn_RX_RSR_0x26 = 0X0026, //空闲接收缓存寄存器
|
// Sn_RX_RSR_0x26 = 0X0026, //空闲接收缓存寄存器
|
||||||
Sn_RX_RD_0x28 = 0X0028, //接收读指针寄存器
|
// Sn_RX_RD_0x28 = 0X0028, //接收读指针寄存器
|
||||||
Sn_RX_WR_0x2A = 0X002A, //接收写指针寄存器
|
// Sn_RX_WR_0x2A = 0X002A, //接收写指针寄存器
|
||||||
Sn_IMR_0x2C = 0X002C, //中断屏蔽寄存器
|
// Sn_IMR_0x2C = 0X002C, //中断屏蔽寄存器
|
||||||
Sn_FRAG_0x2D = 0X002D, //分段寄存器
|
// Sn_FRAG_0x2D = 0X002D, //分段寄存器
|
||||||
Sn_KPALVTR_0x2F = 0X002F, //在线时间寄存器
|
// Sn_KPALVTR_0x2F = 0X002F, //在线时间寄存器
|
||||||
}W5500_SOCKET_REG;
|
//}W5500_SOCKET_REG;
|
||||||
|
|
||||||
//SOCKET状态
|
////SOCKET状态
|
||||||
typedef enum
|
//typedef enum
|
||||||
{
|
//{
|
||||||
SOCK_CLOSED = 0x00, //关闭状态
|
// SOCK_CLOSED = 0x00, //关闭状态
|
||||||
SOCK_INIT = 0x13, //初始化
|
// SOCK_INIT = 0x13, //初始化
|
||||||
SOCK_LISTEN = 0x14, //监听
|
// SOCK_LISTEN = 0x14, //监听
|
||||||
SOCK_ESTABLISHED= 0x17, //TCP客户端连接成功
|
// SOCK_ESTABLISHED= 0x17, //TCP客户端连接成功
|
||||||
SOCK_CLOSE_WAIT = 0x1C, //接收到断开指令
|
// SOCK_CLOSE_WAIT = 0x1C, //接收到断开指令
|
||||||
SOCK_UDP = 0x22, //UDP模式下,open
|
// SOCK_UDP = 0x22, //UDP模式下,open
|
||||||
SOCK_MACRAW = 0x42, //MACRAW模式
|
// SOCK_MACRAW = 0x42, //MACRAW模式
|
||||||
SOCK_SYNSENT = 0x15, //已经发送连接请求
|
// SOCK_SYNSENT = 0x15, //已经发送连接请求
|
||||||
SOCK_SYNRECV = 0x16, //接收到连接成功指令
|
// SOCK_SYNRECV = 0x16, //接收到连接成功指令
|
||||||
SOCK_FIN_WAIT = 0x18, //正在关闭socket
|
// SOCK_FIN_WAIT = 0x18, //正在关闭socket
|
||||||
SOCK_CLOSING = 0x1A, //正在关闭socket
|
// SOCK_CLOSING = 0x1A, //正在关闭socket
|
||||||
SOCK_TIME_WAIT = 0x1B, //超时关闭socket
|
// SOCK_TIME_WAIT = 0x1B, //超时关闭socket
|
||||||
SOCK_LAST_ACK = 0x1D, //socket处于关闭状态
|
// SOCK_LAST_ACK = 0x1D, //socket处于关闭状态
|
||||||
}W5500_SOCKET_STATUS;
|
//}W5500_SOCKET_STATUS;
|
||||||
|
|
||||||
//socket命令
|
////socket命令
|
||||||
typedef enum
|
//typedef enum
|
||||||
{
|
//{
|
||||||
SOCKET_CMD_OPEN = 0x01, //open
|
// SOCKET_CMD_OPEN = 0x01, //open
|
||||||
SOCKET_CMD_LISTEN = 0x02, //LISTEN
|
// SOCKET_CMD_LISTEN = 0x02, //LISTEN
|
||||||
SOCKET_CMD_CONHECT = 0x04,
|
// SOCKET_CMD_CONHECT = 0x04,
|
||||||
SOCKET_CMD_DISCON = 0x08,
|
// SOCKET_CMD_DISCON = 0x08,
|
||||||
SOCKET_CMD_CLOSE = 0x10,
|
// SOCKET_CMD_CLOSE = 0x10,
|
||||||
SOCKET_CMD_SEND = 0x20,
|
// SOCKET_CMD_SEND = 0x20,
|
||||||
SOCKET_CMD_SEND_MAC = 0x21,
|
// SOCKET_CMD_SEND_MAC = 0x21,
|
||||||
SOCKET_CMD_SEND_KEEP= 0x22,
|
// SOCKET_CMD_SEND_KEEP= 0x22,
|
||||||
SOCKET_CMD_RECV = 0x40,
|
// SOCKET_CMD_RECV = 0x40,
|
||||||
}W5500_SOCKET_CMD;
|
//}W5500_SOCKET_CMD;
|
||||||
|
|
||||||
|
|
||||||
typedef enum
|
//typedef enum
|
||||||
{
|
//{
|
||||||
SOCKET_CLOSED = 0,
|
// SOCKET_CLOSED = 0,
|
||||||
SOCKET_TCP = 1,
|
// SOCKET_TCP = 1,
|
||||||
SOCKET_UDP = 2,
|
// SOCKET_UDP = 2,
|
||||||
SOCKET_MACRAW = 3,
|
// SOCKET_MACRAW = 3,
|
||||||
}W5500_PROTOCOL;
|
//}W5500_PROTOCOL;
|
||||||
|
|
||||||
typedef void (*W5500RcvCall)(uint8_t socket, uint8_t *buf, uint16_t len);
|
//typedef void (*W5500RcvCall)(uint8_t socket, uint8_t *buf, uint16_t len);
|
||||||
typedef void (*W5500CloseCall)(uint8_t socket);
|
//typedef void (*W5500CloseCall)(uint8_t socket);
|
||||||
|
|
||||||
typedef struct
|
//typedef struct
|
||||||
{
|
//{
|
||||||
uint8_t cs;
|
// uint8_t cs;
|
||||||
SpiDev spi;
|
// SpiDev spi;
|
||||||
W5500RcvCall rcv_call;
|
// W5500RcvCall rcv_call;
|
||||||
uint16_t *server_port;
|
// uint16_t *server_port;
|
||||||
W5500CloseCall close_call;
|
// W5500CloseCall close_call;
|
||||||
uint8_t close_cnt[W5500_MAX_SOCKET_NUM];
|
// uint8_t close_cnt[W5500_MAX_SOCKET_NUM];
|
||||||
uint8_t read_buf[W5500_MAX_READ_BUF_SIZE];
|
// uint8_t read_buf[W5500_MAX_READ_BUF_SIZE];
|
||||||
}W5500Item;
|
//}W5500Item;
|
||||||
|
|
||||||
#define W5500_STATIC_INIT(_name, _spi, _cs, _rcv_call) \
|
//#define W5500_STATIC_INIT(_name, _spi, _cs, _rcv_call) \
|
||||||
W5500Item _name = \
|
// W5500Item _name = \
|
||||||
{ \
|
// { \
|
||||||
(_cs), \
|
// (_cs), \
|
||||||
(_spi), \
|
// (_spi), \
|
||||||
(_rcv_call), \
|
// (_rcv_call), \
|
||||||
}
|
// }
|
||||||
|
|
||||||
void drv_w5500_init(W5500Item *item, uint32_t ip, uint16_t *port_array, uint32_t gateway_ip, uint32_t net_mask, uint8_t *mac, uint16_t timeout);
|
//void drv_w5500_init(W5500Item *item, uint32_t ip, uint16_t *port_array, uint32_t gateway_ip, uint32_t net_mask, uint8_t *mac, uint16_t timeout);
|
||||||
void drv_w5500_poll(W5500Item *item);
|
//void drv_w5500_poll(W5500Item *item);
|
||||||
bool drv_w5500_creat_tcp_server(W5500Item *item, uint8_t socket, uint16_t local_port);
|
//bool drv_w5500_creat_tcp_server(W5500Item *item, uint8_t socket, uint16_t local_port);
|
||||||
|
//
|
||||||
|
//bool drv_w5500_read_comm_reg(W5500Item *item, uint16_t reg, uint8_t *value, uint16_t len);
|
||||||
|
//bool drv_w5500_write_comm_reg(W5500Item *item, uint8_t reg, uint8_t *value, uint16_t len);
|
||||||
|
//bool drv_w5500_read_socket_reg(W5500Item *item, uint8_t ctrl_phase, uint16_t reg, uint8_t *value, uint16_t len);
|
||||||
|
//bool drv_w5500_write_socket_reg(W5500Item *item, uint8_t ctrl_phase, uint16_t reg, uint8_t *value, uint16_t len);
|
||||||
|
//bool drv_w5500_dma_write_socket_reg(W5500Item *item, uint8_t ctrl_phase, uint16_t reg, uint8_t *value, uint16_t len);
|
||||||
|
//bool drv_w5500_dma_read_socket_reg(W5500Item *item, uint8_t ctrl_phase, uint16_t reg, uint8_t *value, uint16_t len);
|
||||||
|
//
|
||||||
|
//uint8_t drv_w5500_get_socket_status(W5500Item *item, uint8_t socket);
|
||||||
|
//bool drv_w5500_close_socket(W5500Item *item, uint8_t socket);
|
||||||
|
//void drv_w5500_set_close_call(W5500Item *item, W5500CloseCall call);
|
||||||
|
|
||||||
bool drv_w5500_read_comm_reg(W5500Item *item, uint16_t reg, uint8_t *value, uint16_t len);
|
//#endif
|
||||||
bool drv_w5500_write_comm_reg(W5500Item *item, uint8_t reg, uint8_t *value, uint16_t len);
|
|
||||||
bool drv_w5500_read_socket_reg(W5500Item *item, uint8_t ctrl_phase, uint16_t reg, uint8_t *value, uint16_t len);
|
|
||||||
bool drv_w5500_write_socket_reg(W5500Item *item, uint8_t ctrl_phase, uint16_t reg, uint8_t *value, uint16_t len);
|
|
||||||
bool drv_w5500_dma_write_socket_reg(W5500Item *item, uint8_t ctrl_phase, uint16_t reg, uint8_t *value, uint16_t len);
|
|
||||||
bool drv_w5500_dma_read_socket_reg(W5500Item *item, uint8_t ctrl_phase, uint16_t reg, uint8_t *value, uint16_t len);
|
|
||||||
|
|
||||||
uint8_t drv_w5500_get_socket_status(W5500Item *item, uint8_t socket);
|
|
||||||
bool drv_w5500_close_socket(W5500Item *item, uint8_t socket);
|
|
||||||
void drv_w5500_set_close_call(W5500Item *item, W5500CloseCall call);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
Loading…
Reference in New Issue