diff --git a/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong-riscv64/include/board.h b/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong-riscv64/include/board.h index b3b197955..32d32f02f 100644 --- a/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong-riscv64/include/board.h +++ b/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong-riscv64/include/board.h @@ -146,12 +146,12 @@ extern "C" #define FPIOA_CH438_INT 22 /* w5500 FPIOA */ -#define FPIOA_ENET_NRST 5 -#define FPIOA_ENET_NINT 6 -#define FPIOA_ENET_SCLK 7 -#define FPIOA_ENET_MISO 8 -#define FPIOA_ENET_MOSI 9 -#define FPIOA_ENET_NCS 10 +#define FPIOA_ENET_NRST 0 +#define FPIOA_ENET_NINT 9 +#define FPIOA_ENET_SCLK 28 +#define FPIOA_ENET_MISO 29 +#define FPIOA_ENET_MOSI 23 +#define FPIOA_ENET_NCS 31 /* other mode FPIOA */ #define FPIOA_E220_M0 1 diff --git a/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong-riscv64/src/k210_w5500.c b/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong-riscv64/src/k210_w5500.c index 12cb92c6f..755404f91 100644 --- a/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong-riscv64/src/k210_w5500.c +++ b/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong-riscv64/src/k210_w5500.c @@ -27,8 +27,8 @@ ****************************************************************************/ w5500_param_t w5500_param; -static uint8_t rx_buf[30]; -static uint8_t tx_buf[30]; +static uint8_t rx_buf[256]; +static uint8_t tx_buf[256]; static uint8_t config_ip_addr[] = {10, 0, 30, 50}; static uint8_t config_ip_mask[] = {255, 255, 255, 0}; @@ -283,7 +283,7 @@ uint16_t w5500_read_sock_bytes(socket_t sock, uint8_t *dat) uint8_t val; recv_size = w5500_read_sock_short(sock, W5500_SN_RX_RSR_REG); - //no receive data + /* no receive data */ if(recv_size == 0) { return 0; @@ -297,7 +297,7 @@ uint16_t w5500_read_sock_bytes(socket_t sock, uint8_t *dat) recv_addr = w5500_read_sock_short(sock, W5500_SN_RX_RD_REG); write_addr = recv_addr; - //calculate physical address + /* calculate physical address */ recv_addr &= (SOCK_RECV_SIZE - 1); NCS_L(); spi_write_short(recv_addr); @@ -340,7 +340,7 @@ uint16_t w5500_read_sock_bytes(socket_t sock, uint8_t *dat) write_addr += recv_size; w5500_write_sock_short(sock, W5500_SN_RX_RD_REG, write_addr); - //start receive + /* start receive */ w5500_write_sock_byte(sock, W5500_SN_CR_REG, SN_CR_RECV); return recv_size; } @@ -357,7 +357,7 @@ void w5500_write_sock_bytes(socket_t sock, uint8_t *dat, uint16_t size) uint16_t recv_addr, write_addr; uint16_t i; - // if udp mode, set ip and port + /* if udp mode, set ip and port */ if(w5500_read_sock_byte(sock, W5500_SN_MR_REG) != SOCK_UDP) { w5500_write_sock_long(sock, W5500_SN_DIPR_REG, w5500_param.udp_ip); @@ -422,7 +422,7 @@ void w5500_reset(void) RST_L(); RST_H(); - //wait connect ok + /* wait connect ok */ while((dat & LINK) == 0) { up_mdelay(500); @@ -442,7 +442,7 @@ void w5500_config_init(void) { uint8_t i = 0; - //software reset, set 1 and auto clear 0 + /* software reset, set 1 and auto clear 0 */ w5500_write_byte(W5500_MR_REG, MR_RST); up_mdelay(100); @@ -451,17 +451,17 @@ void w5500_config_init(void) w5500_write_bytes(W5500_SHAR_REG, w5500_param.mac_addr, 6); w5500_write_bytes(W5500_SIPR_REG, w5500_param.ip_addr, 4); - //set socket rx and tx memory size 2k + /* set socket rx and tx memory size 2k */ for(i = 0; i < 8; i++) { w5500_write_sock_byte(i, W5500_SN_RXBUF_SIZE_REG, 0x02); w5500_write_sock_byte(i, W5500_SN_TXBUF_SIZE_REG, 0x02); } - //set retry time 200ms (0x07d0 = 2000) + /* set retry time 200ms (0x07d0 = 2000) */ w5500_write_short(W5500_RTR_REG, 0x07d0); - //retry time with 8, when exceed it, produce overtime interrupt, set W5500_SN_IR_REG(TIMEOUT) + /* retry time with 8, when exceed it, produce overtime interrupt, set W5500_SN_IR_REG(TIMEOUT) */ w5500_write_byte(W5500_RCR_REG, 8); } @@ -476,7 +476,7 @@ uint8_t w5500_detect_gateway(void) { uint8_t ip_addr[4] = {w5500_param.ip_addr[0] + 1, w5500_param.ip_addr[1] + 1, w5500_param.ip_addr[2] + 1, w5500_param.ip_addr[3] + 1}; - //check gateway and get gateway phyiscal address + /* check gateway and get gateway phyiscal address */ w5500_write_sock_long(0, W5500_SN_DIPR_REG, ip_addr); w5500_write_sock_byte(0, W5500_SN_MR_REG, SN_MR_TCP); w5500_write_sock_byte(0, W5500_SN_CR_REG, SN_CR_OPEN); @@ -488,13 +488,13 @@ uint8_t w5500_detect_gateway(void) return FALSE; } - //set socket connection mode + /* set socket connection mode */ w5500_write_sock_byte(0, W5500_SN_CR_REG, SN_CR_CONNECT); do { uint8_t val = 0; - //read socket0 interrupt register + /* read socket0 interrupt register */ val = w5500_read_sock_byte(0, W5500_SN_IR_REG); if(val != 0) @@ -510,7 +510,7 @@ uint8_t w5500_detect_gateway(void) } else if(w5500_read_sock_byte(0, W5500_SN_DHAR_REG) != 0xff) { - //close socket + /* close socket */ w5500_write_sock_byte(0, W5500_SN_CR_REG, SN_CR_CLOSE); return TRUE; } @@ -527,7 +527,7 @@ uint8_t w5500_detect_gateway(void) *******************************************************************************/ void w5500_socket_init(socket_t sock) { - //max partition bytes = 30 + /* max partition bytes = 30 */ w5500_write_sock_short(0, W5500_SN_MSSR_REG, 30); switch(sock) @@ -632,7 +632,7 @@ void w5500_irq_process(void) ir_flag = w5500_read_byte(W5500_SIR_REG); do { - //handle socket0 event + /* handle socket0 event */ if((ir_flag & S0_INT) == S0_INT) { sn_flag = w5500_read_sock_byte(0, W5500_SN_IR_REG); @@ -640,13 +640,13 @@ void w5500_irq_process(void) if(sn_flag & IR_CON) { - //socket connection finished + /* socket connection finished */ w5500_param.sock.flag |= SOCK_FLAG_CONN; } if(sn_flag & IR_DISCON) { - //disconnect state + /* disconnect state */ w5500_write_sock_byte(0, W5500_SN_CR_REG, SN_CR_CLOSE); w5500_socket_init(0); w5500_param.sock.flag = 0; @@ -654,7 +654,7 @@ void w5500_irq_process(void) if(sn_flag & IR_SEND_OK) { - //send one package ok + /* send one package ok */ w5500_param.sock.state |= SOCK_STAT_SEND; } @@ -665,7 +665,7 @@ void w5500_irq_process(void) if(sn_flag & IR_TIMEOUT) { - //close socket, connection failed + /* close socket, connection failed */ w5500_write_sock_byte(0, W5500_SN_CR_REG, SN_CR_CLOSE); w5500_param.sock.flag = 0; } @@ -753,14 +753,17 @@ void w5500_socket_config(void) *Description: W5500 receives and sends the received data *Input: sock: port number *Output: None -*Return value: None +*Return value: receive data length *******************************************************************************/ -void Process_Socket_Data(socket_t sock) +uint16_t Process_Socket_Data(socket_t sock) { uint16_t size; size = w5500_read_sock_bytes(sock, rx_buf); memcpy(tx_buf, rx_buf, size); w5500_write_sock_bytes(sock, tx_buf, size); + + return size; + } /**************************************************************************** @@ -772,7 +775,7 @@ void Process_Socket_Data(socket_t sock) ****************************************************************************/ void SPI_Configuration(void) { - /* simluate SPI bus */ + /* config simluate SPI bus */ k210_fpioa_config(BSP_ENET_SCLK, HS_GPIO(FPIOA_ENET_SCLK) | K210_IOFLAG_GPIOHS); k210_fpioa_config(BSP_ENET_NRST, HS_GPIO(FPIOA_ENET_NRST) | K210_IOFLAG_GPIOHS); k210_fpioa_config(BSP_ENET_MOSI, HS_GPIO(FPIOA_ENET_MOSI) | K210_IOFLAG_GPIOHS); @@ -795,7 +798,8 @@ void SPI_Configuration(void) void w5500_test(void) { - uint32_t cnt = 0; + uint8_t cnt = 0; + uint8_t length = 0; SPI_Configuration(); w5500_load_param(); w5500_reset(); @@ -805,24 +809,31 @@ void w5500_test(void) w5500_socket_config(); w5500_irq_process(); + /* If Socket0 receives data */ if((w5500_param.sock.state & SOCK_STAT_RECV) == SOCK_STAT_RECV) { w5500_param.sock.state &= ~SOCK_STAT_RECV; - Process_Socket_Data(0); + length = Process_Socket_Data(0); + printf("w5500 receive: "); + for(int i = 0; i < length; i++) + { + printf("%x ", rx_buf[i]); + } + printf("\n"); } - else if(cnt >= 10) + /* Otherwise, send data regularly */ + else if(cnt >= 5) { if(w5500_param.sock.flag == (SOCK_FLAG_INIT|SOCK_FLAG_CONN)) { w5500_param.sock.state &= ~SOCK_STAT_SEND; memcpy(tx_buf, "\r\nWelcome To internet!\r\n", 21); w5500_write_sock_bytes(0, tx_buf, 21); - break; } cnt = 0; } - up_mdelay(1000); + up_mdelay(100); cnt++; } diff --git a/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong-riscv64/src/k210_w5500.h b/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong-riscv64/src/k210_w5500.h index 0e8ad87f1..86e238b03 100644 --- a/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong-riscv64/src/k210_w5500.h +++ b/Ubiquitous/Nuttx_Fusion_XiUOS/aiit_board/xidatong-riscv64/src/k210_w5500.h @@ -312,7 +312,8 @@ void w5500_irq_process(void); void w5500_intialization(void); void w5500_load_param(void); void w5500_socket_config(void); -void Process_Socket_Data(socket_t sock); +uint16_t Process_Socket_Data(socket_t sock); void SPI_Configuration(void); +void w5500_test(void); #endif diff --git a/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/apps/nshlib/Kconfig b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/apps/nshlib/Kconfig index e0e603faf..eb17d6b8a 100644 --- a/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/apps/nshlib/Kconfig +++ b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/apps/nshlib/Kconfig @@ -551,6 +551,10 @@ config NSH_DISABLE_CH376 bool "Disable the ch376 demo." default n +config NSH_DISABLE_W5500 + bool "Disable the w5500 demo." + default n + config NSH_DISABLE_CH438 bool "Disable the ch438 demo." default n diff --git a/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/apps/nshlib/nsh.h b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/apps/nshlib/nsh.h index 0df886d26..fbb8043c5 100644 --- a/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/apps/nshlib/nsh.h +++ b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/apps/nshlib/nsh.h @@ -1454,6 +1454,10 @@ int nsh_foreach_var(FAR struct nsh_vtbl_s *vtbl, nsh_foreach_var_t cb, int cmd_Ch376(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv); #endif +#if defined(CONFIG_BSP_USING_ENET) && !defined(CONFIG_NSH_DISABLE_W5500) + int cmd_w5500(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv); +#endif + #if defined(CONFIG_BSP_USING_CH438) && !defined(CONFIG_NSH_DISABLE_CH438) int cmd_Ch438(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv); #endif diff --git a/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/apps/nshlib/nsh_Applicationscmd.c b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/apps/nshlib/nsh_Applicationscmd.c index 7bac913da..9b7dfa14b 100644 --- a/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/apps/nshlib/nsh_Applicationscmd.c +++ b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/apps/nshlib/nsh_Applicationscmd.c @@ -51,6 +51,19 @@ int cmd_Ch376(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) } #endif +/**************************************************************************** + * Name: cmd_w5500 + ****************************************************************************/ +#if defined(CONFIG_BSP_USING_ENET) && !defined(CONFIG_NSH_DISABLE_W5500) +extern void w5500_test(void); +int cmd_w5500(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv) +{ + nsh_output(vtbl, "Hello, world!\n"); + w5500_test(); + return OK; +} +#endif + /**************************************************************************** * Name: cmd_Ch438 ****************************************************************************/ diff --git a/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/apps/nshlib/nsh_command.c b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/apps/nshlib/nsh_command.c index c0132baf6..c8d5eee23 100644 --- a/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/apps/nshlib/nsh_command.c +++ b/Ubiquitous/Nuttx_Fusion_XiUOS/app_match_nuttx/apps/nshlib/nsh_command.c @@ -600,6 +600,10 @@ static const struct cmdmap_s g_cmdmap[] = { "ch376", cmd_Ch376, 1, 1, "[ch376 demo cmd.]" }, #endif +#if defined(CONFIG_BSP_USING_ENET) && !defined(CONFIG_NSH_DISABLE_W5500) + { "w5500", cmd_w5500, 1, 1, "[w5500 demo cmd.]" }, +#endif + #if defined(CONFIG_BSP_USING_CH438) && !defined(CONFIG_NSH_DISABLE_CH438) { "ch438", cmd_Ch438, 1, 1, "[ch438 demo cmd.]" }, #endif