TCP可以正常使用
This commit is contained in:
@@ -35,6 +35,7 @@ extern "C" {
|
||||
#define CH395F_CMD_GET_CMD_STATUS 0x2CU
|
||||
#define CH395F_CMD_GET_GLOB_INT_STATUS 0x29U
|
||||
#define CH395F_CMD_GET_GLOB_INT_STATUS_ALL 0x19U
|
||||
#define CH395F_CMD_GET_UNREACH_IPPT 0x28U
|
||||
#define CH395F_CMD_GET_PHY_STATUS 0x26U
|
||||
#define CH395F_CMD_GET_DHCP_STATUS 0x42U
|
||||
|
||||
@@ -124,19 +125,26 @@ extern "C" {
|
||||
#define CH395F_CMD_WRITE_GPIO_REG 0xEDU
|
||||
|
||||
/*
|
||||
* CH395 错误码(来自手册 CH395INC.H 引用)
|
||||
* CH395 命令执行状态码(CMD_GET_CMD_STATUS 返回值,与芯片手册一致)
|
||||
*/
|
||||
#define CH395F_ERR_SUCCESS 0x00U
|
||||
#define CH395F_ERR_BUSY 0x01U
|
||||
#define CH395F_ERR_CMD 0x02U
|
||||
#define CH395F_ERR_MAC 0x03U
|
||||
#define CH395F_ERR_PHY 0x04U
|
||||
#define CH395F_ERR_IP_CONFLI 0x05U
|
||||
#define CH395F_ERR_SOCK 0x06U
|
||||
#define CH395F_ERR_SOCK_BUSY 0x07U
|
||||
#define CH395F_ERR_SOCK_CLOSED 0x08U
|
||||
#define CH395F_ERR_SOCK_ERR 0x09U
|
||||
#define CH395F_ERR_UNKNOW 0xFFU
|
||||
#define CH395F_ERR_SUCCESS 0x00U /* 成功 */
|
||||
#define CH395F_ERR_BUSY 0x10U /* 忙,命令正在执行 */
|
||||
#define CH395F_ERR_MEM 0x11U /* 内存管理错误 */
|
||||
#define CH395F_ERR_BUF 0x12U /* 缓冲区错误 */
|
||||
#define CH395F_ERR_TIMEOUT 0x13U /* 超时 */
|
||||
#define CH395F_ERR_RTE 0x14U /* 路由错误 */
|
||||
#define CH395F_ERR_ABRT 0x15U /* 连接中止 */
|
||||
#define CH395F_ERR_RST 0x16U /* 连接复位 */
|
||||
#define CH395F_ERR_CLSD 0x17U /* 连接关闭 */
|
||||
#define CH395F_ERR_CONN 0x18U /* 无连接 */
|
||||
#define CH395F_ERR_VAL 0x19U /* 值错误 */
|
||||
#define CH395F_ERR_ARG 0x1AH /* 参数错误 */
|
||||
#define CH395F_ERR_USE 0x1BH /* 已被使用 */
|
||||
#define CH395F_ERR_IF 0x1CH /* MAC 错误 */
|
||||
#define CH395F_ERR_ISCONN 0x1DH /* 已连接 */
|
||||
#define CH395F_ERR_OPEN 0x20U /* 已打开 */
|
||||
#define CH395F_CMD_RET_ABORT 0x5FU /* 命令中止(来自官方库) */
|
||||
#define CH395F_ERR_UNKNOW 0xFAU /* 未知错误」 */
|
||||
|
||||
/*
|
||||
* PHY 状态码
|
||||
@@ -148,6 +156,13 @@ extern "C" {
|
||||
#define CH395F_PHY_100M_HALF 0x10U /* 100M 半双工 */
|
||||
#define CH395F_PHY_AUTO_NEGOTIATE 0x20U /* 自动协商 */
|
||||
|
||||
/*
|
||||
* 功能参数标志位(CMD_SET_FUN_PARA)
|
||||
*/
|
||||
#define CH395F_FUN_PARA_TCP_SERVER (1UL << 1) /* TCP Server 多连接模式 */
|
||||
#define CH395F_FUN_PARA_SOCKET_CLOSE (1UL << 3) /* Socket 关闭控制(0=芯片自动,1=外部控制) */
|
||||
#define CH395F_FUN_PARA_DISABLE_SEND_OK (1UL << 4) /* 禁用 SEND_OK 中断 */
|
||||
|
||||
/*
|
||||
* 协议类型
|
||||
*/
|
||||
@@ -178,7 +193,7 @@ extern "C" {
|
||||
#define CH395F_TCP_TIME_WAIT 0x0AU
|
||||
|
||||
/*
|
||||
* 全局中断状态位
|
||||
* 全局中断状态位(CMD_GET_GLOB_INT_STATUS 1字节版,仅Socket 0~3)
|
||||
*/
|
||||
#define CH395F_GINT_STAT_UNREACH 0x01U
|
||||
#define CH395F_GINT_STAT_IP_CONFLI 0x02U
|
||||
@@ -190,15 +205,25 @@ extern "C" {
|
||||
#define CH395F_GINT_STAT_SOCK3 0x80U
|
||||
|
||||
/*
|
||||
* Socket 中断状态位
|
||||
* 全局中断状态位(CMD_GET_GLOB_INT_STATUS_ALL 2字节版,支持Socket 0~7)
|
||||
* 低字节高字节分别定义
|
||||
*/
|
||||
#define CH395F_SINT_STAT_CONNECT 0x01U
|
||||
#define CH395F_SINT_STAT_DISCONNECT 0x02U
|
||||
#define CH395F_SINT_STAT_SEND_OK 0x04U
|
||||
#define CH395F_SINT_STAT_SENBUF_FREE 0x08U
|
||||
#define CH395F_SINT_STAT_RECV_OK 0x10U
|
||||
#define CH395F_SINT_STAT_DISCARD 0x20U
|
||||
#define CH395F_SINT_STAT_SOCK_TIMEOUT 0x40U
|
||||
#define CH395F_GINT_STAT_SOCK4 0x0100U
|
||||
#define CH395F_GINT_STAT_SOCK5 0x0200U
|
||||
#define CH395F_GINT_STAT_SOCK6 0x0400U
|
||||
#define CH395F_GINT_STAT_SOCK7 0x0800U
|
||||
#define CH395F_GINT_STAT_DHCPV6 0x8000U
|
||||
|
||||
/*
|
||||
* Socket 中断状态位(CMD_GET_INT_STATUS_SN 返回值,来自手册表5-x)
|
||||
*/
|
||||
#define CH395F_SINT_STAT_SENBUF_FREE 0x01U /* bit0: 发送缓冲区空闲 */
|
||||
#define CH395F_SINT_STAT_SEND_OK 0x02U /* bit1: 发送成功 */
|
||||
#define CH395F_SINT_STAT_RECV_OK 0x04U /* bit2: 接收缓冲区非空 */
|
||||
#define CH395F_SINT_STAT_CONNECT 0x08U /* bit3: TCP 连接成功 */
|
||||
#define CH395F_SINT_STAT_DISCONNECT 0x10U /* bit4: TCP 连接断开 */
|
||||
#define CH395F_SINT_STAT_DISCARD 0x20U /* bit5: 保留 */
|
||||
#define CH395F_SINT_STAT_SOCK_TIMEOUT 0x40U /* bit6: 超时 */
|
||||
|
||||
/*
|
||||
* 类型定义区 - 驱动返回码
|
||||
@@ -277,6 +302,15 @@ ch395f_status_t ch395f_reset(void);
|
||||
*/
|
||||
uint8_t ch395f_get_cmd_status(void);
|
||||
|
||||
/*
|
||||
* 函数功能:轮询等待命令执行完成
|
||||
* 入口参数:timeout_ms - 超时时间(毫秒) uint32_t
|
||||
* 返回值:命令执行状态码(CH395F_ERR_SUCCESS 或 CH395F_CMD_RET_ABORT)
|
||||
* 限定条件:在发送长执行命令(OPEN/TCP_LISTEN/CONNECT/DISCONNECT/CLOSE/DHCP)后调用
|
||||
* 函数说明:每 20ms 查询一次,直到命令完成或超时
|
||||
*/
|
||||
uint8_t ch395f_poll_cmd_status(uint32_t timeout_ms);
|
||||
|
||||
/*
|
||||
* 函数功能:初始化 CH395(包含 MAC、PHY、TCP/IP 协议栈)
|
||||
* 返回值:CH395F_STATUS_OK - 成功,CH395F_STATUS_TIMEOUT - 超时失败
|
||||
@@ -382,7 +416,7 @@ uint8_t ch395f_get_dhcp_status(void);
|
||||
|
||||
/*
|
||||
* 函数功能:设置 Socket 协议类型
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 3
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* proto - 协议类型 uint8_t CH395F_PROTO_TYPE_xxx
|
||||
* 限定条件:Socket 未打开
|
||||
*/
|
||||
@@ -390,7 +424,7 @@ void ch395f_set_proto_type(uint8_t sock, uint8_t proto);
|
||||
|
||||
/*
|
||||
* 函数功能:设置 Socket 目标 IP 地址
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 3
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* p_ip - 4 字节目标 IP 指针 uint8_t*
|
||||
* 限定条件:指针非空
|
||||
*/
|
||||
@@ -398,7 +432,7 @@ void ch395f_set_des_ip(uint8_t sock, uint8_t *p_ip);
|
||||
|
||||
/*
|
||||
* 函数功能:设置 Socket 目标端口(小端序)
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 3
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* port - 目标端口 uint16_t
|
||||
* 限定条件:无
|
||||
*/
|
||||
@@ -406,7 +440,7 @@ void ch395f_set_des_port(uint8_t sock, uint16_t port);
|
||||
|
||||
/*
|
||||
* 函数功能:设置 Socket 源端口(小端序)
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 3
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* port - 源端口 uint16_t
|
||||
* 限定条件:无
|
||||
*/
|
||||
@@ -414,38 +448,43 @@ void ch395f_set_sour_port(uint8_t sock, uint16_t port);
|
||||
|
||||
/*
|
||||
* 函数功能:打开 Socket
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 3
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* 返回值:命令执行状态码(CH395F_ERR_SUCCESS 表示成功) uint8_t
|
||||
* 限定条件:协议类型、目标 IP、端口已设置
|
||||
*/
|
||||
void ch395f_open_socket(uint8_t sock);
|
||||
uint8_t ch395f_open_socket(uint8_t sock);
|
||||
|
||||
/*
|
||||
* 函数功能:关闭 Socket
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 3
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* 返回值:命令执行状态码(CH395F_ERR_SUCCESS 表示成功) uint8_t
|
||||
* 限定条件:Socket 已打开
|
||||
*/
|
||||
void ch395f_close_socket(uint8_t sock);
|
||||
uint8_t ch395f_close_socket(uint8_t sock);
|
||||
|
||||
/*
|
||||
* 函数功能:启动 TCP 监听模式
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 3
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* 返回值:命令执行状态码(CH395F_ERR_SUCCESS 表示成功) uint8_t
|
||||
* 限定条件:Socket 已打开且协议类型为 TCP
|
||||
*/
|
||||
void ch395f_tcp_listen(uint8_t sock);
|
||||
uint8_t ch395f_tcp_listen(uint8_t sock);
|
||||
|
||||
/*
|
||||
* 函数功能:启动 TCP 连接
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 3
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* 返回值:命令执行状态码(CH395F_ERR_SUCCESS 表示成功) uint8_t
|
||||
* 限定条件:Socket 已打开且协议类型为 TCP
|
||||
*/
|
||||
void ch395f_tcp_connect(uint8_t sock);
|
||||
uint8_t ch395f_tcp_connect(uint8_t sock);
|
||||
|
||||
/*
|
||||
* 函数功能:断开 TCP 连接
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 3
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* 返回值:命令执行状态码(CH395F_ERR_SUCCESS 表示成功) uint8_t
|
||||
* 限定条件:TCP 已建立连接
|
||||
*/
|
||||
void ch395f_tcp_disconnect(uint8_t sock);
|
||||
uint8_t ch395f_tcp_disconnect(uint8_t sock);
|
||||
|
||||
/*
|
||||
* 函数声明区 - Socket 数据传输
|
||||
@@ -453,7 +492,7 @@ void ch395f_tcp_disconnect(uint8_t sock);
|
||||
|
||||
/*
|
||||
* 函数功能:向 Socket 发送缓冲区写入数据
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 3
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* p_data - 数据指针 uint8_t*
|
||||
* len - 数据长度 uint16_t
|
||||
* 限定条件:指针非空,长度大于 0,TCP 已连接或 UDP 已打开
|
||||
@@ -462,7 +501,7 @@ void ch395f_write_send_buf(uint8_t sock, uint8_t *p_data, uint16_t len);
|
||||
|
||||
/*
|
||||
* 函数功能:从 Socket 接收缓冲区读取数据
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 3
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* p_data - 输出缓冲区指针 uint8_t*
|
||||
* len - 待读取数据长度 uint16_t
|
||||
* 限定条件:指针非空,长度大于 0,接收缓冲区有数据
|
||||
@@ -471,7 +510,7 @@ void ch395f_read_recv_buf(uint8_t sock, uint8_t *p_data, uint16_t len);
|
||||
|
||||
/*
|
||||
* 函数功能:获取 Socket 接收缓冲区数据长度
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 3
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* 返回值:接收数据长度 uint16_t
|
||||
* 限定条件:Socket 已打开
|
||||
*/
|
||||
@@ -488,14 +527,174 @@ uint16_t ch395f_get_recv_len(uint8_t sock);
|
||||
*/
|
||||
uint8_t ch395f_get_glob_int_status(void);
|
||||
|
||||
/*
|
||||
* 函数功能:获取全局中断状态(2 字节版,支持 Socket 0~7)
|
||||
* 返回值:中断状态 uint16_t(低字节=Socket 0~3 + PHY/DHCP,高字节=Socket 4~7 + DHCPv6)
|
||||
* 限定条件:芯片已初始化
|
||||
*/
|
||||
uint16_t ch395f_get_glob_int_status_all(void);
|
||||
|
||||
/*
|
||||
* 函数功能:获取 Socket 中断状态
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 3
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* 返回值:Socket 中断状态字节 uint8_t
|
||||
* 限定条件:芯片已初始化
|
||||
*/
|
||||
uint8_t ch395f_get_sock_int_status(uint8_t sock);
|
||||
|
||||
/*
|
||||
* 函数功能:获取 Socket 状态(2 字节输出)
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* status - 2 字节输出缓冲区 [0]=Socket状态, [1]=TCP状态
|
||||
* 限定条件:芯片已初始化
|
||||
* 函数说明:Socket 状态: 00H=CLOSED, 05H=OPEN
|
||||
* TCP 状态: 00H=CLOSED, 01H=LISTEN, 02H=SYN_SENT, 03H=SYN_RCVD, 04H=ESTABLISHED
|
||||
*/
|
||||
void ch395f_get_socket_status(uint8_t sock, uint8_t *status);
|
||||
|
||||
/*
|
||||
* 函数声明区 - Socket 远端信息
|
||||
*/
|
||||
|
||||
/*
|
||||
* 函数功能:获取远端 IP 和端口
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* p_buf - 6 字节输出缓冲区(4字节IP + 2字节端口)
|
||||
* 限定条件:TCP Server 模式下连接建立后调用
|
||||
* 函数说明:IP 低字节在前,端口低字节在前
|
||||
*/
|
||||
void ch395f_get_remot_ipp(uint8_t sock, uint8_t *p_buf);
|
||||
|
||||
/*
|
||||
* 函数声明区 - 功能参数设置
|
||||
*/
|
||||
|
||||
/*
|
||||
* 函数功能:设置 CH395 功能参数
|
||||
* 入口参数:para - 4 字节功能参数 uint32_t
|
||||
* bit0: 未使用,必须为 0
|
||||
* bit1: TCP Server 多连接模式使能
|
||||
* bit2: 低功耗模式
|
||||
* bit3: Socket 关闭控制(0=芯片自动关闭,1=外部关闭)
|
||||
* bit4: 禁用 SEND_OK 中断
|
||||
* 限定条件:必须在 ch395f_init() 之前调用
|
||||
*/
|
||||
void ch395f_set_fun_para(uint32_t para);
|
||||
|
||||
/*
|
||||
* 函数声明区 - TCP MSS 设置
|
||||
*/
|
||||
|
||||
/*
|
||||
* 函数功能:设置 TCP MSS
|
||||
* 入口参数:mss - MSS 值 uint16_t 60~1460
|
||||
* 限定条件:必须在 ch395f_init() 之前调用
|
||||
*/
|
||||
void ch395f_set_tcp_mss(uint16_t mss);
|
||||
|
||||
/*
|
||||
* 函数声明区 - Socket 缓冲区设置
|
||||
*/
|
||||
|
||||
/*
|
||||
* 函数功能:设置 Socket 接收缓冲区
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* start_block - 起始块地址 uint8_t
|
||||
* block_count - 块个数 uint8_t
|
||||
* 限定条件:必须在 OPEN_SOCKET_SN 之前调用
|
||||
*/
|
||||
void ch395f_set_recv_buf(uint8_t sock, uint8_t start_block, uint8_t block_count);
|
||||
|
||||
/*
|
||||
* 函数功能:设置 Socket 发送缓冲区
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* start_block - 起始块地址 uint8_t
|
||||
* block_count - 块个数 uint8_t
|
||||
* 限定条件:必须在 OPEN_SOCKET_SN 之前调用
|
||||
*/
|
||||
void ch395f_set_send_buf(uint8_t sock, uint8_t start_block, uint8_t block_count);
|
||||
|
||||
/*
|
||||
* 函数功能:清空 Socket 接收缓冲区
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* 限定条件:Socket 已打开
|
||||
*/
|
||||
void ch395f_clear_recv_buf(uint8_t sock);
|
||||
|
||||
/*
|
||||
* 函数功能:设置 TCP KeepAlive 空闲时间
|
||||
* 入口参数:time - 空闲时间(毫秒,必须为 500 的倍数) uint32_t
|
||||
* 限定条件:必须在 ch395f_init() 之前调用
|
||||
*/
|
||||
void ch395f_set_keepalive_idle(uint32_t time);
|
||||
|
||||
/*
|
||||
* 函数功能:设置 TCP KeepAlive 探测间隔
|
||||
* 入口参数:time - 间隔时间(毫秒,必须为 500 的倍数) uint32_t
|
||||
* 限定条件:必须在 ch395f_init() 之前调用
|
||||
*/
|
||||
void ch395f_set_keepalive_intvl(uint32_t time);
|
||||
|
||||
/*
|
||||
* 函数功能:设置 TCP KeepAlive 探测次数
|
||||
* 入口参数:cnt - 探测次数 uint8_t
|
||||
* 限定条件:必须在 ch395f_init() 之前调用
|
||||
*/
|
||||
void ch395f_set_keepalive_cnt(uint8_t cnt);
|
||||
|
||||
/*
|
||||
* 函数功能:启用/禁用指定 Socket 的 KeepAlive
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* enable - 1 启用,0 禁用 uint8_t
|
||||
* 限定条件:Socket 已打开
|
||||
*/
|
||||
void ch395f_set_keepalive_enable(uint8_t sock, uint8_t enable);
|
||||
|
||||
/*
|
||||
* 函数声明区 - TCP 重传参数设置
|
||||
*/
|
||||
|
||||
/*
|
||||
* 函数功能:设置 TCP 重传次数
|
||||
* 入口参数:cnt - 重传次数 uint8_t(0=使用默认值5)
|
||||
* 限定条件:必须在 ch395f_init() 之前调用
|
||||
*/
|
||||
void ch395f_set_retrans_count(uint8_t cnt);
|
||||
|
||||
/*
|
||||
* 函数功能:设置 TCP 重传周期
|
||||
* 入口参数:period - 重传周期(毫秒) uint16_t
|
||||
* 限定条件:必须在 ch395f_init() 之前调用
|
||||
*/
|
||||
void ch395f_set_retrans_period(uint16_t period);
|
||||
|
||||
/*
|
||||
* 函数声明区 - ARP / TTL / 不可达信息
|
||||
*/
|
||||
|
||||
/*
|
||||
* 函数功能:设置 ARP 重传参数
|
||||
* 入口参数:period_100ms - ARP 重传周期(单位 100ms,0=默认值=10即1秒) uint8_t
|
||||
* cnt - ARP 重传次数(0=默认值=3,255=无限重传) uint8_t
|
||||
* 限定条件:应在 ch395f_init() 之后调用
|
||||
*/
|
||||
void ch395f_set_arp(uint8_t period_100ms, uint8_t cnt);
|
||||
|
||||
/*
|
||||
* 函数功能:设置 Socket TTL
|
||||
* 入口参数:sock - Socket 索引 uint8_t 0 - 7
|
||||
* ttl - TTL 值 uint8_t 最大 128
|
||||
* 限定条件:Socket 已打开,TCP Server 模式下不生效
|
||||
*/
|
||||
void ch395f_set_ttl(uint8_t sock, uint8_t ttl);
|
||||
|
||||
/*
|
||||
* 函数功能:获取不可达信息(用于调试连接失败原因)
|
||||
* 出口参数:p_buf - 8 字节输出缓冲区(类型+协议码+端口+IP)
|
||||
* 限定条件:收到 GINT_STAT_UNREACH 中断后调用
|
||||
*/
|
||||
void ch395f_get_unreach_info(uint8_t *p_buf);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user