fix some bugs--restore w5500 section
This commit is contained in:
parent
69cf524761
commit
aa35be0cd1
|
@ -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));
|
||||||
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
@ -179,17 +179,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,
|
||||||
// */
|
*/
|
||||||
//};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -872,7 +872,7 @@ void protocol_build_json(uint16_t groupId)
|
||||||
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", "SN11223344");
|
||||||
cJSON_AddNumberToObject(deviceObj, "currentPack", groupId);
|
cJSON_AddNumberToObject(deviceObj, "currentPack", groupId);
|
||||||
cJSON_AddNumberToObject(deviceObj, "totalPack", 16);
|
cJSON_AddNumberToObject(deviceObj, "totalPack", 16);
|
||||||
|
|
||||||
|
@ -930,7 +930,7 @@ void protocol_build_volt_json(uint8_t i)
|
||||||
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", "SN11223344");
|
||||||
cJSON_AddNumberToObject(deviceObj, "currentPack", i + 3); // 当前包数
|
cJSON_AddNumberToObject(deviceObj, "currentPack", i + 3); // 当前包数
|
||||||
cJSON_AddNumberToObject(deviceObj, "totalPack", 16); // 总包数
|
cJSON_AddNumberToObject(deviceObj, "totalPack", 16); // 总包数
|
||||||
|
|
||||||
|
@ -984,7 +984,7 @@ void protocol_build_temp_json(uint8_t i)
|
||||||
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", "SN11223344");
|
||||||
cJSON_AddNumberToObject(deviceObj, "currentPack", i + 13); // 当前包数
|
cJSON_AddNumberToObject(deviceObj, "currentPack", i + 13); // 当前包数
|
||||||
cJSON_AddNumberToObject(deviceObj, "totalPack", 16); // 总包数
|
cJSON_AddNumberToObject(deviceObj, "totalPack", 16); // 总包数
|
||||||
|
|
||||||
|
|
|
@ -107,7 +107,7 @@ void drv_eg25g_init2(void)
|
||||||
#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 "BCU01" // 订阅/发布的主题
|
#define MQTT_TOPIC "bluesun/bms/period/11223344" // 订阅/发布的主题
|
||||||
#define MQTT_MESSAGE "Hello from FC41D!" // 发送的消息
|
#define MQTT_MESSAGE "Hello from FC41D!" // 发送的消息
|
||||||
#define WIFI_TIMEOUT 1000
|
#define WIFI_TIMEOUT 1000
|
||||||
|
|
||||||
|
|
|
@ -216,7 +216,7 @@ static uint8_t drv_ble_init()
|
||||||
}
|
}
|
||||||
|
|
||||||
//设置wifi名称,必须以BSM开头,后缀可以加sn码
|
//设置wifi名称,必须以BSM开头,后缀可以加sn码
|
||||||
if (!drv_at_send_cmd("AT+QBLENAME=BSM123456", "OK", WIFI_TIMEOUT))
|
if (!drv_at_send_cmd("AT+QBLENAME=BSM11223344", "OK", WIFI_TIMEOUT))
|
||||||
{
|
{
|
||||||
KIT_PRINTF("Failed to start BLE advertising!\r\n");
|
KIT_PRINTF("Failed to start BLE advertising!\r\n");
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -256,7 +256,7 @@ uint8_t drv_qfc41d_init(void)
|
||||||
#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 "BCU01" // 订阅/发布的主题
|
#define MQTT_TOPIC "bluesun/bms/period/11223344" // 订阅/发布的主题
|
||||||
#define MQTT_MESSAGE "Hello from FC41D!" // 发送的消息
|
#define MQTT_MESSAGE "Hello from FC41D!" // 发送的消息
|
||||||
|
|
||||||
// 连接 MQTT 服务器
|
// 连接 MQTT 服务器
|
||||||
|
|
|
@ -1,428 +1,427 @@
|
||||||
///******************************************************************************
|
/******************************************************************************
|
||||||
// * @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);
|
|
||||||
////}
|
|
||||||
|
|
||||||
////uint8_t drv_w5500_get_socket_status(W5500Item *item, uint8_t socket)
|
item->server_port = port_array;
|
||||||
////{
|
//自动协商 最高位置位,否则PHY重启
|
||||||
//// uint8_t buf[1];
|
buf[0] = 0x38 | 0x80 | 0x40;
|
||||||
//// uint8_t socket_reg = W5500_CREAT_SOCKET_REG(socket);
|
drv_w5500_write_comm_reg(item, W5500_PHYCFGR_REG_0x2E, buf, 1);
|
||||||
//// //读取当前socket状态
|
|
||||||
//// drv_w5500_read_socket_reg(item, socket_reg, Sn_SR_0x03, buf, 1);
|
buf[0] = 0;
|
||||||
////
|
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
|
|
||||||
//#define SOCKET_UDP_PACKSIZE 1472 //1-1472
|
|
||||||
//#define SOCKET_TCP_PACKSIZE 1460 //1-1460
|
|
||||||
//#define SOCKET_PPPOE_PACKSIZE 1464 //1-1464
|
|
||||||
//#define SOCKET_MACRAW_PACKSIZE 1514 //1-1514
|
|
||||||
|
|
||||||
//bool drv_w5500_creat_tcp_server(W5500Item *item, uint8_t socket, uint16_t local_port)
|
#define SOCKET_UDP_PACKSIZE 1472 //1-1472
|
||||||
|
#define SOCKET_TCP_PACKSIZE 1460 //1-1460
|
||||||
|
#define SOCKET_PPPOE_PACKSIZE 1464 //1-1464
|
||||||
|
#define SOCKET_MACRAW_PACKSIZE 1514 //1-1514
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
|
||||||
|
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))
|
||||||
// {
|
// {
|
||||||
// uint8_t tmp_buf[4];
|
// drv_w5500_read_socket_reg(&w5500, socket_reg, Sn_CR_0x01, buf, 1);
|
||||||
// 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);
|
|
||||||
|
|
||||||
//#endif
|
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);
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue