forked from gary/BCU
2
0
Fork 0
BCU/library/drv_peripheral/drv_w5500.h

215 lines
9.5 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

///******************************************************************************
// * @file drv_w5500.h
// * @brief w5500 drivers
// * @version V1.0
// * @author Gary
// * @copyright
// ******************************************************************************/
//#ifndef DRV_W5500_H_
//#define DRV_W5500_H_
//#include <stdint.h>
//#include "drv_spi.h"
//#define W5500_PRT_EN false
//#define W5500_READ_ACCESS_MODE (0u)
//#define W5500_WRITE_ACCESS_MODE (4u)
//#define W5500_MAX_SOCKET_NUM (8u)
//#define W5500_MAX_READ_BUF_SIZE (2048u)
//#define W5500_CREAT_SOCKET_REG(socket) ((socket) << 2 | 0x01)
//#define W5500_CREAT_SOCKET_WRITE_BUF(socket) ((socket) << 2 | 0x02)
//#define W5500_CREAT_SOCKET_READ_BUF(socket) ((socket) << 2 | 0x03)
//#define Sn_IR_SEND_OK 0x10 /**< complete sending */
////寄存器选择定义
//typedef enum
//{
// SELECT_GREG_00 = 0, //通用寄存器
// SELECT_SECKET0_01 = 1, //socket0寄存器
// SELECT_SECKET1_05 = 5, //socket1寄存器
// SELECT_SECKET2_09 = 9, //socket2寄存器
// SELECT_SECKET3_13 = 13, //socket3寄存器
// SELECT_SECKET4_17 = 17, //socket4寄存器
// SELECT_SECKET5_21 = 21, //socket5寄存器
// SELECT_SECKET6_25 = 25, //socket6寄存器
// SELECT_SECKET7_29 = 29, //socket7寄存器
// SELECT_SECKET0_TXREG_02 = 2, //socket0发送缓冲区
// SELECT_SECKET1_TXREG_06 = 6, //socket0发送缓冲区
// SELECT_SECKET2_TXREG_10 = 10, //socket0发送缓冲区
// SELECT_SECKET3_TXREG_14 = 14, //socket0发送缓冲区
// SELECT_SECKET4_TXREG_18 = 18, //socket0发送缓冲区
// SELECT_SECKET5_TXREG_22 = 22, //socket0发送缓冲区
// SELECT_SECKET6_TXREG_26 = 26, //socket0发送缓冲区
// SELECT_SECKET7_TXREG_30 = 30, //socket0发送缓冲区
// SELECT_SECKET0_RXREG_03 = 3, //socket0接收缓冲区
// SELECT_SECKET1_RXREG_07 = 7, //socket0接收缓冲区
// SELECT_SECKET2_RXREG_11 = 11, //socket0接收缓冲区
// SELECT_SECKET3_RXREG_15 = 15, //socket0接收缓冲区
// SELECT_SECKET4_RXREG_19 = 19, //socket0接收缓冲区
// SELECT_SECKET5_RXREG_23 = 23, //socket0接收缓冲区
// SELECT_SECKET6_RXREG_27 = 27, //socket0接收缓冲区
// SELECT_SECKET7_RXREG_31 = 31, //socket0接收缓冲区
//}W5500_BLOCK_SELECT;
////通用寄存器地址定义
//typedef enum
//{
// W5500_MODE_REG_0x00 = 0x0000, //模式寄存器
// W5500_GAR0_REG_0x01 = 0x0001, //网关地址字节1
// W5500_GAR1_REG_0x02 = 0x0002, //网关地址字节2
// W5500_GAR2_REG_0x03 = 0x0003, //网关地址字节3
// W5500_GAR3_REG_0x04 = 0x0004, //网关地址字节4
// W5500_SUBR0_REG_0x05 = 0x0005, //子网掩码字节1
// W5500_SUBR1_REG_0x06 = 0x0006, //子网掩码字节2
// W5500_SUBR2_REG_0x07 = 0x0007, //子网掩码字节3
// W5500_SUBR3_REG_0x08 = 0x0008, //子网掩码字节4
// W5500_SHAR0_REG_0x09 = 0x0009, //MAC硬件地址字节1
// W5500_SHAR1_REG_0x0A = 0x000A, //MAC硬件地址字节2
// W5500_SHAR2_REG_0x0B = 0x000B, //MAC硬件地址字节3
// W5500_SHAR3_REG_0x0C = 0x000C, //MAC硬件地址字节4
// W5500_SHAR4_REG_0x0D = 0x000D, //MAC硬件地址字节5
// W5500_SHAR5_REG_0x0E = 0x000E, //MAC硬件地址字节6
// W5500_SIPR0_REG_0x0F = 0x000F, //本地IP字节1
// W5500_SIPR1_REG_0x10 = 0x0010, //本地IP字节2
// W5500_SIPR2_REG_0x11 = 0x0011, //本地IP字节3
// W5500_SIPR3_REG_0x12 = 0x0012, //本地IP字节4
// W5500_INTLEVEL0_REG_0x13 = 0x0013, //低电平中断定时器寄存器-高字节
// W5500_INTLEVEL1_REG_0x14 = 0x0014, //低电平中断定时器寄存器-低字节
// W5500_IR_REG_0x15 = 0x0015, //中断寄存器
// W5500_IMR_REG_0x16 = 0x0016, //中断 屏蔽 寄存器
// W5500_SIR_REG_0x17 = 0x0017, //Socket 中断寄存器
// W5500_SIMR_REG_0x18 = 0x0018, //Socket 中断屏蔽寄存器
// W5500_RTR0_REG_0x19 = 0x0019, //重试时间值寄存器-高字节
// W5500_RTR1_REG_0x1A = 0x001A, //重试时间值寄存器-低字节
// W5500_RCR_REG_0x1B = 0x001B, //重试计数器
// W5500_PTIMER_REG_0x1C = 0x001C, //PPP连接控制协议请求定时寄存器
// W5500_PMAGIC_REG_0x1D = 0x001D, //PPP连接控制协议幻数寄存器
// W5500_PHAR0_REG_0x1E = 0x001E, //PPPoE 模式下目标 MAC 寄存器
// W5500_PHAR1_REG_0x1F = 0x001F, //PPPoE 模式下目标 MAC 寄存器
// W5500_PHAR2_REG_0x20 = 0x0020, //PPPoE 模式下目标 MAC 寄存器
// W5500_PHAR3_REG_0x21 = 0x0021, //PPPoE 模式下目标 MAC 寄存器
// W5500_PHAR4_REG_0x22 = 0x0022, //PPPoE 模式下目标 MAC 寄存器
// W5500_PHAR5_REG_0x23 = 0x0023, //PPPoE 模式下目标 MAC 寄存器
// W5500_PSID0_REG_0x24 = 0x0024, //PPPoE 模式下会话 ID 寄存器
// W5500_PSID1_REG_0x25 = 0x0025, //PPPoE 模式下会话 ID 寄存器
// W5500_PMRU0_REG_0x26 = 0x0026, //PPPoE模式下最大接收单元
// W5500_PMRU1_REG_0x27 = 0x0027, //PPPoE模式下最大接收单元
// W5500_UIPR0_REG_0x28 = 0x0028, //无法抵达 IP 地址寄存器
// W5500_UIPR1_REG_0x28 = 0x0029, //无法抵达 IP 地址寄存器
// W5500_UIPR2_REG_0x2A = 0x002A, //无法抵达 IP 地址寄存器
// W5500_UIPR3_REG_0x2B = 0x002B, //无法抵达 IP 地址寄存器
// W5500_UPORTR0_REG_0x2C = 0x002C, //无法抵达 端口 地址寄存器
// W5500_UPORTR1_REG_0x2D = 0x002D, //无法抵达 端口 地址寄存器
// W5500_PHYCFGR_REG_0x2E = 0x002E, //W5500 PHY 配置寄 存器
// W5500_VERSIONR_REG_0x39 = 0x0039, //芯片版本信息默认为0x04
//}W5500_REG_ADDR;
////socket n寄存器
//typedef enum
//{
// Sn_MR_0x00 = 0x0000, //模式寄存器
// Sn_CR_0x01 = 0x0001, //配置寄存器
// Sn_IR_0x02 = 0X0002, //中断寄存器
// Sn_SR_0x03 = 0X0003, //状态寄存器
// Sn_PORT_0x04 = 0X0004, //源端口寄存器
// Sn_DHAR_0x06 = 0X0006, //目的MAC地址寄存器
// Sn_DIPR_0x0C = 0X000C, //目标IP地址寄存器
// Sn_DPORT_0x10 = 0X0010, //目标端口寄存器
// Sn_MSSR_0x12 = 0X0012, //最大分段寄存器
// Sn_TOS_0x15 = 0X0015, //服务类型寄存器
// Sn_TTL_0x16 = 0X0016, //生存时间寄存器
// Sn_RXBUFF_SIZE_0x1E = 0X001E, //接收缓冲区大小寄存器
// Sn_TXBUFF_SIZE_0x1F = 0X001F, //发送缓冲区大小寄存器
// Sn_TX_FSR_0x20 = 0X0020, //空闲发送缓存寄存器
// Sn_TX_RD_0x22 = 0X0022, //发送读指针寄存器
// Sn_TX_WR_0x24 = 0X0024, //发送写指针寄存器
// Sn_RX_RSR_0x26 = 0X0026, //空闲接收缓存寄存器
// Sn_RX_RD_0x28 = 0X0028, //接收读指针寄存器
// Sn_RX_WR_0x2A = 0X002A, //接收写指针寄存器
// Sn_IMR_0x2C = 0X002C, //中断屏蔽寄存器
// Sn_FRAG_0x2D = 0X002D, //分段寄存器
// Sn_KPALVTR_0x2F = 0X002F, //在线时间寄存器
//}W5500_SOCKET_REG;
////SOCKET状态
//typedef enum
//{
// SOCK_CLOSED = 0x00, //关闭状态
// SOCK_INIT = 0x13, //初始化
// SOCK_LISTEN = 0x14, //监听
// SOCK_ESTABLISHED= 0x17, //TCP客户端连接成功
// SOCK_CLOSE_WAIT = 0x1C, //接收到断开指令
// SOCK_UDP = 0x22, //UDP模式下,open
// SOCK_MACRAW = 0x42, //MACRAW模式
// SOCK_SYNSENT = 0x15, //已经发送连接请求
// SOCK_SYNRECV = 0x16, //接收到连接成功指令
// SOCK_FIN_WAIT = 0x18, //正在关闭socket
// SOCK_CLOSING = 0x1A, //正在关闭socket
// SOCK_TIME_WAIT = 0x1B, //超时关闭socket
// SOCK_LAST_ACK = 0x1D, //socket处于关闭状态
//}W5500_SOCKET_STATUS;
////socket命令
//typedef enum
//{
// SOCKET_CMD_OPEN = 0x01, //open
// SOCKET_CMD_LISTEN = 0x02, //LISTEN
// SOCKET_CMD_CONHECT = 0x04,
// SOCKET_CMD_DISCON = 0x08,
// SOCKET_CMD_CLOSE = 0x10,
// SOCKET_CMD_SEND = 0x20,
// SOCKET_CMD_SEND_MAC = 0x21,
// SOCKET_CMD_SEND_KEEP= 0x22,
// SOCKET_CMD_RECV = 0x40,
//}W5500_SOCKET_CMD;
//typedef enum
//{
// SOCKET_CLOSED = 0,
// SOCKET_TCP = 1,
// SOCKET_UDP = 2,
// SOCKET_MACRAW = 3,
//}W5500_PROTOCOL;
//typedef void (*W5500RcvCall)(uint8_t socket, uint8_t *buf, uint16_t len);
//typedef void (*W5500CloseCall)(uint8_t socket);
//typedef struct
//{
// uint8_t cs;
// SpiDev spi;
// W5500RcvCall rcv_call;
// uint16_t *server_port;
// W5500CloseCall close_call;
// uint8_t close_cnt[W5500_MAX_SOCKET_NUM];
// uint8_t read_buf[W5500_MAX_READ_BUF_SIZE];
//}W5500Item;
//#define W5500_STATIC_INIT(_name, _spi, _cs, _rcv_call) \
// W5500Item _name = \
// { \
// (_cs), \
// (_spi), \
// (_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_poll(W5500Item *item);
//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