Files
STM32F4-Base/docs/CH395F.md

114 KiB
Raw Permalink Blame History

1、概述

CH395 是以太网协议栈管理芯片,用于单片机系统进行以太网通讯。

CH395芯片自带10/100M以太网介质传输层MAC和物理层收发器PHY完全兼容IEEE802.3协议,内置了 IP、ARP、ICMP、UDP、TCP 等以太网协议栈固件。单片机系统可以方便的通过 CH395 芯片进行网络通讯。

CH395 支持三种通讯接口8 位并口、SPI 接口和异步串口,单片机/DSP/MCU/MPU 等控制器可以通过上述任何一种通讯接口控制 CH395 芯片进行以太网通讯。

下图为 CH395 的应用框图。

图 CH395 应用框图

![](https://lsky.bitnasdaq.vip/eE81DM.jpg)

2、特点

内部自带以太网介质传输层 MAC 和物理层收发器 PHY 支持 10/100M全双工/半双工自适应,兼容 IEEE802.3 协议 支持 MDI/MDIX 线路自动转换 I/O 口支持 3.3V、2.5V、1.8V 供电,兼容多种电压标准的单片机 内置网口上拉电阻、晶振匹配电容,精简外围电路 内置 TCP/IP 协议簇,支持 IPv4、ARP、ICMP、UDP、TCP 协议 支持 DHCP 自动获取 IP 地址 提供 8 个独立的 Socket 对,可以同时进行数据收发 支持 MACRAW 模式和 IPRAW 模式 提供最高 40MHz 速度的 SPI 设备接口SPI 模式 0 或 3高位在前

提供高速 8 位被动并行接口,支持连接到单片机的并行数据总线 提供最高 10Mbps 速度的异步串口,支持连接到单片机的串行口,支持通讯波特率动态调整 CH395F 串口支持 RS485 收发自动切换,支持硬件流控 支持睡眠模式 内置 24K RAM可用于以太网数据收发每个 Socket 收发缓冲区可以自由配置 内置 4KB EEPROM 支持 8 路 GPIO 提供 QFN32、LQFP64M 和 LQFP128 无铅封装

3、引脚排列

表 封装说明

封装形式 塑体尺寸 引脚节距 封装说明 订货型号
QFN32 4*4mm 0.4mm 15.7mil 四边无引线32脚 CH395F
LQFP64M 10*10mm 0.5mm 19.7mil LQFP64M(10*10)贴片 CH395A
LQFP128 14*14mm 0.4mm 15.7mil 标准LQFP128贴片 CH395P

1、新设计建议使用更小封装的CH395F。 2、CH395A基于CH395Q升级CH395P基于CH395L升级引脚基本兼容替换时需调整外围电路。 3、CH395Q、CH395L维持供货但不建议新设计选用。

4、引脚定义

4.1 CH395F 引脚定义

表 CH395F 引脚定义

CH395F引脚号 引脚名称 类型(1) 引脚说明(2)
2 RXP I/O 10BASE-T/100BASE-TX MDI模式下的差分输入;10BASE-T/100BASE-TX MDIX模式下的差分输出。
3 RXN
4 TXP I/O 10BASE-T/100BASE-TX MDI模式下的差分输出;10BASE-T/100BASE-TX MDIX模式下的差分输入。
5 TXN
6 VCC33 P 3.3V电源输入,建议0.1uF并联10uF或4.7uF对地电容贴近芯片放置。
19 VCCIO P I/O接口的电源输入,建议0.1uF对地电容贴近芯片放置。
9 VDDK P 外接1uF对地电容贴近芯片放置。
0 GND P 公共接地端。
1、7、8 NC - 保留引脚,建议悬空。
12 XI I 晶体振荡器输入,需外接25MHz晶体一端,或外部时钟输入,内置晶振匹配电容。
13 XO 0 晶体振荡器反相输出,需外接25MHz晶体另一端,内置晶振匹配电容。
10 RSTI I,PU 外部复位输入,低电平有效,内置上拉电阻。
11 TNOW 0 发送状态输出,用于控制串口的RS485收发切换。
14 RST 0 复位和外部复位输出,高电平有效。
15 INT# 0 中断请求输出,低电平有效。
16 ELINK# 0 网络连接指示LED输出:低电平表示以太网PHY已连接;高电平表示以太网PHY未连接。
17 SEL I,PU 在芯片内部复位期间作为接口配置输入使用,其具体配置方法详见章节6.1。
18 EACT# 0 载波感应指示LED输出:LED闪烁表示有载波感应信号。
20 GPI00 I/O 通用输入输出引脚0,默认配置为输入模式。
21 AO/GPI01 I/O,PU A0:并口的地址输入,区分命令口与数据口,内置上拉电阻;当A0=1时可以写命令,当A0=0时可以读写数据。GPI01:通用输入输出引脚1,默认配置为输入模式。
22 RD#/GPI02 I/O,PU RD#:并口的读选通输入,低电平有效,内置上拉电阻。GPI02:通用输入输出引脚2,默认配置为输入模式。
23 WR#/GPI03/RDY# I/O,PU WR#:并口的写选通输入,低电平有效,内置上拉电阻。GPI03:通用输入输出引脚3,默认配置为输出模式。RDY#:CH395F复位完成后,输出低电平;在并口模式下RDY#功能不生效。
24 PCS#/GPI04 I/O, PU PCS#:并口的片选控制信号输入,低电平有效,内置上拉电阻。GPI04:通用输入输出引脚4,默认配置为输入模式。
25 D0/GPI05 I/O, PU D0:并口的8位双向数据总线中的第0位,内置上拉电阻。GPI05:通用输入输出引脚5,默认配置为输入模式。
26 D1/GPI06 I/O, PU D1:并口的8位双向数据总线中的第1位,内置上拉电阻。GPI06:通用输入输出引脚6,默认配置为输入模式。
27 RXD/D2/GPI07 I/O, PU RXD:异步串口的串行数据输入,内置上拉电阻;D2:并口的8位双向数据总线中的第2位,内置上拉电阻。GPI07:通用输入输出引脚7,默认配置为输入模式。
28 TXD/D3 I/O, PU 在芯片内部复位期间为接口配置输入,内置上拉电阻,配置方法详参6.1章节;在芯片复位完成后作为接口引脚使用。TXD:异步串口的串行数据输出。D3:并口的8位双向数据总线中的第3位,内置上拉电阻。
29 SCS/D4 I/O, PU SCS:SPI接口的片选输入SCS,低电平有效,内置上拉电阻。D4:并口的8位双向数据总线中的第4位,内置上拉电阻。
30 SCK/CTS/D5 I/O, PU SCK:SPI接口的串行时钟输入SCK,内置上拉电阻。CTS:清除发送输入,内置上拉电阻。若是高电平,串口在当前数据传输结束时阻断下一次的数据发送,可以连接对端RTS实现硬件流控(串口流控功能默认关闭,可通过CMD_SET_FUN_PARA命令开启)。D5:并口的8位双向数据总线中的第5位,内置上拉电阻。
31 SDI/D6 I/O, PU SDI:SPI接口的串行数据输入SDI,内置上拉电阻。D6:并口的8位双向数据总线中的第6位,内置上拉电阻。
32 SDO/RTS/D7 I/O, PU SDO:作为SPI接口的串行数据输出。RTS:发送请求输出,若是低电平,表明串口准备好接收数据,可以连接对端CTS实现硬件流控(串口流控功能默认关闭,可通过CMD_SET_FUN_PARA命令开启)。D7:并口的8位双向数据总线中的第7位,内置上拉电阻。

注1表格缩写解释 丨= 输入0=输出; 1/0=输入/输出; P =电源PU= 内置上拉电阻。 注2CH395F的复用引脚具体功能取决于当前所选的接口模式。当复用引脚被用于接口功能时其GPIO功能将被占用导致其GPI0功能失效同时GPI0寄存器中对应位无实际意义。

4.2 CH395A 引脚定义

表 CH395A 引脚定义

CH395A引脚号 引脚名称 类型(1) 引脚说明(2)
4 RXP I/O 10BASE-T/100BASE-TX MDI模式下的差分输入;10BASE-T/100BASE-TX MDIX模式下的差分输出。
5 RXN
7 TXP I/O 10BASE-T/100BASE-TX MDI模式下的差分输出;10BASE-T/100BASE-TX MDIX模式下的差分输入。
8 TXN
2、12 VCC33 P 3.3V电源输入,建议0.1uF并联10uF或4.7uF对地电容贴近芯片放置。
21、29、40、45、63 VCCIO P I/O接口的电源输入,建议0.1uF对地电容贴近芯片放置。
19 VDDK P 外接1uF对地电容贴近芯片放置。
28、43 VDDK P 外接0.1uF对地电容贴近芯片放置。
3、9、13、 GND P 公共接地端。
18、20、37、41、44
1、6、14、15、16、17、30、31、38、39、42、51、53、54、64 NC - 保留引脚,建议悬空。
10 XI I 晶体振荡器输入,需外接25MHz晶体一端,或外部时钟输入,内置晶振匹配电容。
11 XO 0 晶体振荡器反相输出,需外接25MHz晶体另一端,内置晶振匹配电容。
22 GPIO0 I/O 通用输入输出引脚0,默认配置为输入。
23 GPIO1 I/O 通用输入输出引脚1,默认配置为输入。
24 GPIO2 I/O 通用输入输出引脚2,默认配置为输入。
25 GPIO3/RDY# I/O GPIO3:通用输入输出引脚3,默认配置为输出;RDY#:CH395A复位后,输出低电平。
26 RST 0 电源上电复位和外部复位输出,高电平有效。
27 SEL I,PU 在芯片内部复位期间作为接口配置输入使用,其具体配置方法详见章节6.1。
32 GPIO4 I/O 通用输入输出引脚4,默认配置为输入。
33 GPIO5/A0 I/O,PU GPIO5:通用输入输出引脚5,默认配置为输入模式。A0:并口的地址输入,区分命令口与数据口,内置上拉电阻;当A0=1时可以写命令,当A0=0时可以读写数据。
34 GPIO6 I/O 通用输入输出引脚6,默认配置为输入。
35 GPIO7 I/O 通用输入输出引脚7,默认配置为输入。
36 RSTI I,PU 外部复位输入,低电平有效,内置上拉电阻。
46 RD# I,PU 并口的读选通输入,低电平有效,内置上拉电阻。
47 WR# I,PU 并口的写选通输入,低电平有效,内置上拉电阻。
49 INT# 0 中断请求输出,低电平有效。
50 PCS# I,PU 并口的片选控制输入,低电平有效,内置上拉电阻。
55 D0 I/O,PU 并口的8位双向数据总线中的第0位,内置上拉电阻。
56 D1 I/O,PU 并口的8位双向数据总线中的第1位,内置上拉电阻。
57 RXD/D2 I/O,PU RXD:异步串口的串行数据输入,内置上拉电阻;D2:并口的8位双向数据总线中的第2位,内置上拉电阻。
58 TXD/D3 I/O,PU 在芯片内部复位期间为接口配置输入,内置上拉电阻,配置方法详参6.1章节;在芯片复位完成后作为接口引脚使用。TXD:异步串口的串行数据输出。D3:并口的8位双向数据总线中的第3位,内置上拉电阻。
59 SCS/D4 I/O,PU SCS:SPI接口的片选输入SCS,低电平有效,内置上拉电阻。D4:并口的8位双向数据总线中的第4位,内置上拉电阻。
60 SCK/D5 I/O,PU SCK:SPI接口的串行时钟输入SCK,内置上拉电阻。D5:并口的8位双向数据总线中的第5位,内置上拉电阻。
61 SDI/D6 I/O,PU SDI:SPI接口的串行数据输入SDI,内置上拉电阻。D6:并口的8位双向数据总线中的第6位,内置上拉电阻。
62 SDO/D7 I/O,PU SDO:作为SPI接口的串行数据输出。D7:并口的8位双向数据总线中的第7位,内置上拉电阻。
48 ELINK# 0 网络连接指示LED输出:低电平表示以太网PHY已连接;高电平表示以太网PHY未连接。
52 EACT# 0 载波感应指示LED输出:LED闪烁表示有载波感应信号。

注1表格缩写解释

丨= 输入0=输出; 1/0=输入/输出;

P = 电源PU= 内置上拉电阻。

注2CH395A的复用引脚具体功能取决于当前所选的接口模式。当复用引脚被用于接口功能时其GPIO功能将被占用导致其GPI0功能失效同时GPI0寄存器中对应位无实际意义。

4.3 CH395P 引脚定义

表 CH395P 引脚定义

CH395P引脚号 引脚名称 类型(1) 引脚说明
10 RXP I/O 10BASE-T/100BASE-TX MDI 模式下的差分输入;10BASE-T/100BASE-TX MDIX 模式下的差分输出。
11 RXN
14 TXP I/O 10BASE-T/100BASE-TX MDI 模式下的差分输出;10BASE-T/100BASE-TX MDIX 模式下的差分输入。
15 TXN
7、21 VCC33 P 3.3V 电源输入,建议 0.1uF 并联 10uF 或 4.7uF 对地电容贴近芯片放置。
39、56、70、83、101、122 VCCIO P I/O 接口的电源输入,建议 0.1uF 对地电容贴近芯片放置。
28 VDDK P 外接 1uF 对地电容贴近芯片放置。
54、82 VDDK P 外接 0.1uF 对地电容贴近芯片放置。
2、9、16、17、22、27、29、55、64、71、109 GND P 公共接地端。
1、3、4、5、6、8、12、13、18、23、24、25、26、30、31、32、33、34、35、36、37、38、40、41、42、43、44、45、46、47、57、58、65、66、67、68、69、72、73、74、75、76、77、78、79、80、81、84、85、86、87、88、89、90、91、92、93、95、96、97、102、103、105、108、110、111、127、128 NC - 保留引脚,建议悬空。
19 XI I 晶体振荡器输入,需外接 25MHz 晶体一端,或外部时钟输入,内置晶振匹配电容。
20 XO 0 晶体振荡器反相输出,需外接 25MHz 晶体另一端,内置晶振匹配电容。
48 GPI00 I/O 通用输入输出引脚0,默认配置为输入。
49 GPI01 I/O 通用输入输出引脚1,默认配置为输入。
50 GPI02 I/O 通用输入输出引脚2,默认配置为输入。
51 GPI03/RDY# I/O GPI03:通用输入输出引脚3,默认配置为输出;RDY#:CH395P复位后,输出低电平。
52 RST 0 电源上电复位和外部复位输出,高电平有效。
53 SEL I,PU 在芯片内部复位期间作为接口配置输入使用,其具体配置方法详见章节6.1。
59 GPI04 I/O 通用输入输出引脚4,默认配置为输入。
60 GPI05 I/O 通用输入输出引脚5,默认配置为输入。
61 GPI06 I/O 通用输入输出引脚6,默认配置为输入。
62 GPI07 I/O 通用输入输出引脚7,默认配置为输入。
63 RSTI I,PU 外部复位输入,低电平有效,内置上拉电阻。
98 INT# 0 中断请求输出,低电平有效。
99 A0 I,PU 并口的地址输入,区分命令口与数据口,内置上拉电阻;当A0=1时可以写命令,当A0=0时可以读写数据。
100 PCS# I,PU 并口的片选控制输入,低电平有效,内置上拉电阻。
106 RD# I,PU 并口的读选通输入,低电平有效,内置上拉电阻。
107 WR# I,PU 并口的写选通输入,低电平有效,内置上拉电阻。
112 RXD I,PU 异步串口的串行数据输入,内置上拉电阻。
113 TXD I/O 在芯片内部复位期间为接口配置输入,内置上拉电阻,配置方法详参6.1章节;在芯片复位完成后为异步串口的串行数据输出。
114 SCS I,PU SPI接口的片选输入,低电平有效,内置上拉电阻。
115 SCK I,PU SPI接口的串行时钟输入,内置上拉电阻。
116 SDI I,PU SPI接口的串行数据输入,内置上拉电阻。
117 SDO 0 SPI接口的串行数据输出。
118121123126 D0~D7 I/O,PU 并口的8位双向数据总线,内置上拉电阻。
94 ELINK# 0 网络连接指示LED输出:低电平表示以太网PHY已连接;高电平表示以太网PHY未连接。
104 EACT# 0 载波感应指示LED输出:LED闪烁表示有载波感应信号。

注1表格缩写解释 |=输入0=输出I/0=输入/输出; P =电源PU= 内置上拉电阻。

5、命令

本手册中的数据,后缀 B 或 b 为二进制数,后缀 H 为十六进制数,否则为十进制数。

低字节在前Little-Endian的双字数据共 32 位)指:先是最低字节(位 7位 0接着是较低字节位 15位 8然后是较高字节位 23位 16最后是最高字节位 31位 24

数据流是指由若干连续字节组成的数据块,总长度最小为 0。

下表输入数据和输出数据的括号中的数字为参数的字节数,没有括号则默认为 1 个字节。

本手册中所指的单片机基本适用于 DSP 或者 MCU/MPU/SCM 等。

Socket Pair(插口对)包含源 IP源端口目的 IP 和目的端口的四元组,可以唯一确定互联网中的连接双方。本手册简称 Socket。CH395 内部可以同时提供 8 个 Socket其索引值分别为 0、1、2、3、4、5、6、7。

本手册约定的 IP 和 MAC 地址高字节和低字节可能与某些文档不同,仅为方便说明:

如 IP 地址为 192.168.1.2,其中 192 为最低字节2 为最高字节。本文称(IP)低字节在前。

如 MAC 地址为 00.01.02.03.04.05,其中 00 为最低字节05 为最高字节。本文称MAC低字节在前。

本手册中所有包含 IP 地址输入或者输出的命令,字节顺序均为 IP 低字节在前。

本手册中所有包含 MAC 地址输入或者输出的命令,字节顺序均为 MAC 低字节在前。

表 命令表

代码 命令名称 CMD_ 输入数据 输出数据 命令用途
01H GET_IC_VER 版本号 获取芯片及固件版本
02H SET_BAUDRATE 波特率系数(3) 操作状态 设置串口通讯波特率
03H ENTER_SLEEP 进入低功耗睡眠挂起状态
05H RESET_ALL (等15ms) 执行硬件复位
06H CHECK_EXIST 任意数据 按位取反 测试通讯接口和工作状态
19H GET_GLOB_INT_STATUS_ALL 全局中断状态(2) 获取全局中断状态
20H SET_PHY PHY连接方式 设置PHY连接方式
21H SET_MAC_ADDR MAC地址(6) 设置MAC地址
22H SET_IP_ADDR IP地址(4) 设置IP地址
23H SET_GWIP_ADDR 网关地址(4) 设置网关IP地址
24H SET_MASK_ADDR 子网掩码(4) 设置子网掩码
25H SET_MAC_FILT 过滤模式 设置MAC过滤模式
HASHO(4)
HASH1(4)
26H GET_PHY_STATUS PHY的状态 获取PHY的状态
27H INIT_CH395 初始化CH395芯片
28H GET_UNREACH_IPPORT 不可达信息(8) 获取不可达IP,端口和协议
29H GET_GLOB_INT_STATUS 全局中断状态 获取全局中断状态
2AH SET_RETRAN_COUNT 重试次数 设置重试次数,最大20次
2BH SET_RETRAN_PERIOD 重试周期(2) 设置重试周期,最大1000ms
2CH GET_CMD_STATUS 命令执行状态 获取命令执行状态
2DH GET_REMOT_IPP_SN Socket索引 IP和端口(6) 获取远端(目的)的IP和端口
2EH CLEAR_RECV_BUF_SN Socket索引 清空Socket的接收缓冲区
2FH GET_SOCKET_STATUS_SN Socket索引 Socket状态 获取Socket状态
30H GET_INT_STATUS_SN Socket索引 Socket中断 获取Socket的中断状态
31H SET_IP_ADDR_SN Socket索引 设置Socket的目的IP地址
目的IP(4)
32H SET_DES_PORT_SN Socket索引 设置Socket的目的端口
目的端口(2)
33H SET_SOUR_PORT_SN Socket索引 设置Socket的源端口
源端口(2)
34H SET_PROTO_TYPE_SN Socket索引 设置Socket的工作模式
协议类型
35H OPEN_SOCKET_SN Socket索引 打开Socket
36H TCP_LISTEN_SN Socket索引 启动Socket监听
37H TCP_CONNECT_SN Socket索引 启动Socket连接
38H TCP_DISCONNECT_SN Socket索引 断开Socket的TCP连接
39H WRITE_SEND_BUF_SN Socket索引 向Socket发送缓冲区写数据
长度(2)
数据流(N)
3BH GET_RECV_LEN_SN Socket索引 长度(2) 获取Socket接收数据长度
3CH READ_RECV_BUF_SN Socket索引 数据流(N) 从Socket接收缓冲区接收数据
长度(2)
3DH CLOSE_SOCKET_SN Socket索引 关闭Socket
3EH SET_IPRAW_PRO_SN Socket索引 设置Socket的IP包的协议字段
IP协议字段
3FH PING_ENABLE 使能标志 PING使能
40H GET_MAC_ADDR MAC地址(6) 获取MAC地址
41H DHCP_ENABLE 使能标志 启动(停止)DHCP
42H GET_DHCP_STATUS DHCP状态 获取DHCP状态
43H GET_IP_INF IP等信息 获取IP,MASK,DNS等信息
44H SET_ARP ARP重传周期 设置ARP重传周期和次数
ARP重传次数
50H SET_TCP_MSS TCP MSS(2) 设置TCP MSS
51H SET_TTL TTL 设置TTL值,最大128
52H SET_RECV_BUF Socket索引 设置Socket接收缓冲区
起始块地址
块个数
53H SET_SEND_BUF Socket索引 设置Socket发送缓冲区
起始块地址
块个数
55H SET_FUN_PARA 功能参数(4) 设置功能参数
56H SET_KEEPALIVE_IDLE 4字节时间参数 设置KEEPALIVE空闲时间
57H SET_KEEPALIVE_INTVL 4字节时间参数 设置KEEPALIVE超时时间
58H SET_KEEPALIVE_CNT 重试次数 设置KEEPALIVE超时重试次数
59H SET_KEEPALIVE_SN Socket索引 设置Socket KEEPALIVE
配置
E9H EEPROM_ERASE 擦除EEPROM
EAH EEPROM_WRITE EEPROM地址(2) 写EEPROM
长度
数据流(N)
EBH EEPROM_READ EEPROM地址(2) 数据流(N) 读EEPROM
长度
ECH READ_GPIO_REG GPIPO寄存器地址 GPIO寄存器值 读GPIO寄存器
EDH WRITE_GPIO_REG GPIPO寄存器地址 写GPIO寄存器
GPIPO寄存器值

表中阴影部分的命令通常需要执行一定的时间并且查询该命令的执行状态单片机可以通过GET_CMD_STATUS 来获取状态(关于状态定义参考 CH395INC.H

5.1 CMD_GET_IC_VER

该命令用于获取芯片及固件版本,返回的 1 个字节数据是版本号。

5.2 CMD_SET_BAUDRATE

该命令用于设置 CH395 的串口通讯波特率。在 CH395 工作于串口通讯方式时复位后默认的通讯波特率由SDOSDI和SCK三个引脚的电平组合设定参考本手册第6.3节),这些引脚都悬空时默认 9600bps。如果单片机支持较高的通讯速度可以通过该命令动态调整串口通讯波特率。该命令需要输入三个数据分别是波特率系数 0、波特率系数 1、波特率系数 2下表是与波特率的对应关系。

表 波特率

波特率系数2 波特率系数1 波特率系数0 串口通讯波特率(bps)
00H 12H COH 4800
00H 25H 80H 9600
00H 4BH 00H 19200
00H 96H 00H 38400
00H E1H 00H 57600
01H 2CH 00H 76800
01H C2H 00H 115200
07H 08H 00H 460800
0EH 10H 00H 921600
0FH 42H 40H 1M
1EH 84H 80H 2M
4CH 4BH 40H 5M
98H 96H 80H 10M
计算公式:BaudRate = (波特率系数2<<16) + (波特率系数1<<8) + 波特率系数0

设置串口通信波特率配置命令的执行时间默认为TE8最短为1ms见表7-4。完成后CH395将以新波特率输出操作状态单片机需在 TE8 时间内尽快调整好自身波特率,等待 CH395 应答。

5.3 CMD_ENTER_SLEEP

该命令使 CH395 芯片进入低功耗睡眠挂起状态。在串口模式下将 CH395 RXD 引脚拉低 35us 及以上,在 SPI 或并口模式下将 SCS 或 PCS#片选脚拉低 35us 及以上可使 CH395 退出低功耗状态,所以单片机在发出 CMD_ENTER_SLEEP 命令后,应该立即使 SCS 或 PCS#片选无效。

进入睡眠状态 CH395 的 MAC 和 PHY 将会进入掉电模式,断开以太网连接。

从睡眠模式唤醒后CH395 需要约 4ms 的时间来完成唤醒过程。在这段唤醒阶段内CH395 不会解析或响应任何接收到的命令码。因此,在 CH395 被唤醒期间,请勿向 CH395 发送任何命令码。建议用户唤醒 4ms 后再对 CH395 进行操作。

5.4 CMD_RESET_ALL

该命令使 CH395 执行硬件复位。通常情况下,硬件复位在 15ms 时间之内完成。

5.5 CMD_CHECK_EXIST

该命令用于测试通讯接口和工作状态,以检查 CH395 是否正常工作。该命令需要输入 1 个字节数据,可以是任意数据,如果 CH395 正常工作,那么 CH395 的输出数据是输入数据的按位取反。例如,输入数据是 57H则输出数据是 A8H。

5.6 CMD_SET_PHY

该命令用设置CH395以太网PHY的连接方式。默认为自动协商方式。该命令需要输入1个字节数据该数据为连接方式代码

连接方式代码为 01H 时断开 PHY 连接;

连接方式代码为 02H 时 PHY 为 10M 全双工;

连接方式代码为 04H 时 PHY 为 10M 半双工;

连接方式代码为 08H 时 PHY 为 100M 全双工;

连接方式代码为 10H 时 PHY 为 100M 半双工;

连接方式代码为 20H 时 PHY 自动协商。

CH395 收到此命令后会复位 MAC 和 PHY按照新设置的连接方式重新进行连接。如果以太网已经连接则会断开并重新连接。

5.7 CMD_SET_MAC_ADDR

该命令用于设置 CH395 的 MAC 地址,需要输入 6 个字节的 MACMAC 地址低字节在前。CH395 芯片将会把 MAC 地址保存在内部的 EEPROM 中。该命令需要约 30us 执行完毕。

CH395 芯片出厂时已经烧录了由 IEEE 分配的 MAC 地址,如非必要请勿设置 MAC 地址。

5.8 CMD_SET_IP_ADDR

该命令用于设置 CH395 的 IP 地址,需要输入 4 个字节的 IP 地址IP 低字节在前。本手册中所有包含 IP 输入或者输出的命令,字节顺序均为 IP 低字节在前,以下将不再说明。

5.9 CMD_SET_GWIP_ADDR

该命令用于设置 CH395 的网关地址,需要输入 4 个字节的 IP 地址。

5.10 CMD_SET_MASK_ADDR

该命令用于设置 CH395 的子网掩码,该命令需要输入 4 个字节的掩码。默认为 255.255.255.0,可以不设置。

5.11 CMD_SET_MAC_FILT

该命令用于设置 MAC 过滤模式。MAC 可以设置多种过滤模式。该命令需要输入 9 个字节数据第1 个字节为过滤模式,该数据的各位含义如下:

表 MAC 过滤表

名称 描述
[5:7] - 保留
4 SEND_ENABLE 发送使能
3 RECV_ENABLE 接收使能
2 RECV_MULTIPKT 接收多播包
1 RECV_ALL 接收所有数据
0 RECV_BROADPKT 接收广播包

以上各位为 1 表示开启,为 0 表示关闭。CH395 复位后默认 RECV_BROADPKT、RECV_ENABLE、SEND_ENABLE 开启。

下表为各位的含义:

表 MAC 过滤含义

RECV_ENABLE RECV_ALL RECV_BROADPKT RECV_MULTIPKT 描述
1 0 0 0 接收与 MAC 地址相匹配的数据包
1 1 X X 接收所有数据包
1 0 1 0 接收与 MAC 地址相匹配的数据包接收广播数据包
1 0 0 1 接收与 MAC 地址相匹配的数据包接收多播数据包
1 0 1 1 接收与 MAC 地址相匹配的数据包接收广播数据包接收多播数据包
0 X X X 禁止接收

第 2 至第 5 字节为 HASH0哈希表 0第 6 至第 9 字节为 HASH1哈希表 1HASH0 与 HASH1 仅在多播开启下有效。

HASH0 和 HASH1 共同构成一个 64 位的 HASH 表0-31 位为 HASH032-63 位为 HASH1。

HASH 表计算方法将多播地址使用标准的以太网冗余校验CRC32计算出一个 32 位的 CRC值使用此 CRC 值的高 6 位作为索引值,将 HASH 表对应的位写 1。例如多播地址计算出 CRC 值的高 6 位为 32则应该将 HASH1 的第 0 位写 1。

5.12 CMD_GET_PHY_STATUS

该命令用于获取 PHY 的连接状态。收到该命令后CH395 会查询当前 PHY 连接状态并输出 1 个字节的 PHY 的连接状态代码:

连接状态代码为 01H 时表示 PHY 连接断开;

连接状态代码为 02H 时表示 PHY 连接为 10M 全双工;

连接状态代码为 04H 时表示 PHY 连接为 10M 半双工;

连接状态代码为 08H 时表示 PHY 连接为 100M 全双工;

连接状态代码为 10H 时表示 PHY 连接为 100M 半双工。

5.13 CMD_INIT_CH395

该命令用于初始化 CH395包括初始化 CH395 的 MAC、PHY 以及 TCP/IP 协议栈。该命令需要约5ms 执行完毕。单片机可以发送 GET_CMD_STATUS 来查询是否执行完毕和执行状态。

5.14 CMD_GET_UNREACH_IPPORT

该命令用于获取不可达 IP端口以及协议类型。当接收到不可达报文后CH395 会产生不可达中断。单片机可以用该命令来获取不可达信息,收到此命令后 CH395 会依次输出 1 字节的不可达代码1 个字节协议类型2 个字节的端口号低字节在前4 个字节 IP。单片机可以根据不可达代码来判断是协议不可达端口不可达还是IP不可达。关于不可达代码请参考RFC792CH395INC.H定义了 4 种常见的不可达代码)。

5.15 CMD_GET_GLOB_INT_STATUS

该命令用于获取全局中断状态,收到此命令后 CH395 会输出 1 个字节的全局中断状态。全局中断状态定义如下:

$ 5-5\ncong E F 45 F 1

名称 描述
7 GINT_STAT_SOCK3 Socket3 中断
6 GINT_STAT_SOCK2 Socket2 中断
5 GINT_STAT_SOCK1 Socket1 中断
4 GINT_STAT_SOCK0 Socket0 中断
3 GINT_STAT_DHCP DHCP 中断
2 GINT_STAT_PHY_CHANGE PHY 状态改变中断
1 GINT_STAT_IP_CONFLI IP 冲突
0 GINT_STAT_UNREACH 不可达中断

① GINT_STAT_UNREACH不可达中断。当 CH395 收到 ICMP 不可达中断报文后,将不可达 IP 数据包的 IP 地址,端口,协议类型保存到不可达信息表中,然后产生此中断,单片机收到此中断,可以发送 GET_UNREACH_IPPORT 命令来获取不可达信息。 ② GINT_STAT_IP_CONFLIIP 冲突中断。当 CH395 检测到自身 IP 地址和同一网段内的其他网络设备 IP 地址相同时会产生此中断。 ③ GINT_STAT_PHY_CHANGEPHY 变化中断。当 CH395 的 PHY 连接有变化时产生此中断,例如 PHY状态由连接状态变化为断开状态或者由断开状态变化为连接状态。单片机可以发送 GET_PHY_STATUS命令来获取当前 PHY 连接的状态。 ④ GINT_STAT_DHCPDHCP 中断。如果单片机使能 CH395 的 DHCP 功能DHCP 成功或超时后 CH395将会产生此中断单片机可以发送 CMD_GET_DHCP_STATUS 命令获取 DHCP 状态,如果状态为 0表示成功否则为超时失败。 ⑤ GINT_STAT_SOCK0GINT_STAT_SOCK3Socket 中断。当 Socket 有中断事件时 CH395 会产生此中断,单片机需要发送 GET_INT_STATUS_SN 获取 Socket 的中断状态。请参考 GET_INT_STATUS_SN部分。

此命令执行完毕后CH395 会将 INT#引脚置为高电平并将全局中断状态清除。

5.16 CMD_GET_GLOB_INT_STATUS_ALL

该命令用于获取全局中断状态,收到此命令后 CH395 会输出 2 个字节的全局中断状态。全局中断状态定义如下:

表 全局中断 2

名称 描述
[12:15] - 保留
11 GINT_STAT_SOCK7 Socket7 中断
10 GINT_STAT_SOCK6 Socket6 中断
9 GINT_STAT_SOCK5 Socket5 中断
8 GINT_STAT_SOCK4 Socket4 中断
7 GINT_STAT_SOCK3 Socket3 中断
6 GINT_STAT_SOCK2 Socket2 中断
5 GINT_STAT_SOCK1 Socket1 中断
4 GINT_STAT_SOCK0 Socket0 中断
3 GINT_STAT_DHCP DHCP 中断
2 GINT_STAT_PHY_CHANGE PHY 状态改变中断
1 GINT_STAT_IP_CONFLI IP 冲突
0 GINT_STAT_UNREACH 不可达中断

关于位 0-7 请参考 5.15 章节。

GINT_STAT_SOCK4GINT_STAT_SOCK7Socket 中断。当 Socket 有中断事件时 CH395 会产生此中断,单片机需要发送 GET_INT_STATUS_SN 获取 Socket 的中断状态。请参考 GET_INT_STATUS_SN 部分。

CH395 获取可以通过 CMD_GET_GLOB_INT_STATUS 和 CMD_GET_GLOB_INT_STATUS_ALL 两个命令来获取中断状态,前者只能获取到低 8 位的中断状态,后者可以获取全部的中断状态,使用时需要注意,任何版本的芯片都支持 CMD_GET_GLOB_INT_STATUS 命令,如果芯片版本号大于等于 0X44 且使用了Socket4 Socke7 则 只 能 用 CMD_GET_GLOB_INT_STATUS_ALL 。 芯 片 版 本 号 小 于 0X44 不 支 持CMD_GET_GLOB_INT_STATUS_ALL 命令。

5.17 CMD_SET_RETRAN_COUNT

该命令用于设置重试次数,需要输入 1 个字节的重试次数,允许最大值为 20输入数据大于 20则会按 20 处理。默认重试次数为 12 次,重试仅在 TCP 模式下有效。

5.18 CMD_SET_RETRAN_PERIOD

该命令用于设置重试周期,需要输入 2 个字节(低字节在前)的周期数,单位为 ms允许最大值为 1000。重试的总时间为 N*MN 为重试次数M 为重试周期。默认重试周期为 500ms重试仅在TCP 模式下有效。

5.19 CMD_GET_CMD_STATUS

该命令用于获取命令执行的状态。CH395 会输出 1个字节数据此数据为命令执行的状态。命令执行状态如下

表 命令执行状态

代码 名称 描述
00H CH395_ERR_SUCCESS 成功
10H CH395_ERR_BUSY 忙,表示命令正在执行
11H CH395_ERR_MEM 内存管理错误
12H CH395_ERR_BUF 缓冲区错误
13H CH395_ERR_TIMEOUT 超时
14H CH395_ERR_RTE 路由错误
15H CH395_ERR_ABRT 连接中止
16H CH395_ERR_RST 连接复位
17H CH395_ERR_CLSD 连接关闭
18H CH395_ERR_CONN 无连接
19H CH395_ERR_VAL 值错误
1AH CH395_ERR_ARG 参数错误
1BH CH395_ERR_USE 已被使用
1CH CH395_ERR_IF MAC 错误
1DH CH395_ERR_ISCONN 已连接
20H CH395_ERR_OPEN 已打开

如果单片机收到 CH395_ERR_BUSY表示 CH395 正在执行命令,单片机则应该延时 2ms 以上再次发送 CMD_GET_CMD_STATUS 命令获取状态。

命令码表中阴影部分的命令均需要发送 CMD_GET_CMD_STATUS 来获取执行状态。

5.20 CMD_GET_REMOT_IPP_SN

该命令用于获取远端的 IP 地址和端口号,需要输入 1 个字节的 Socket 索引值CH395 会输出 4个字节 IP地址2个字节低字节在前端口号。Socket工作在 TCP Server模式且连接建立后单片机可以通过该命令获取远端的 IP 地址及端口号。

5.21 CMD_CLEAR_RECV_BUF_SN

该命令用于清空 Socket 的接收缓冲区,需要输入 1 个字节的 Socket 索引值。收到此命令CH395 会将此 Socket 的接收长度清零,接收指针指向缓冲区头部。

5.22 CMD_GET_SOCKET_STATUS_SN

该命令用于获取 Socket 的状态,需要输入 1 个字节的 Socket 索引值。CH395 接收到此命令后会输出 2 个字节的状态码。

第 1 个状态码为 Socket 的状态码Socket 的状态码定义如下:

表 Socket 状态码

代码 名称
00H SOCKET_CLOSED
05H SOCKET_OPEN

第 2 个状态码为 TCP 的状态码,仅在 TCP 模式且已经被打开时有意义TCP 状态码定义如下:

表 TCP 状态码

代码 名称 描述
00H TCP_CLOSED 关闭
01H TCP_LISTEN 监听
02H TCP_SYN_SENT SYN 发送
03H TCP_SYN_RCVD SYN 接收
04H TCP_ESTABLISHED TCP 连接建立
05H TCP_FIN_WAIT_1 主动关闭方首次发送 FIN
06H TCP_FIN_WAIT_2 主动关闭方收到 FIN 的 ACK
07H TCP_CLOSE_WAIT 被动关闭方收到 FIN
08H TCP_CLOSING 正在关闭
09H TCP_LAST_ACK 被动关闭方发送 FIN
0AH TCP_TIME_WAIT 2MLS 等待状态

TCP 状态均为 TCP/IP 协议中规定的状态,详细的含义请参考 TCP/IP 协议。

应用上只需关心“TCP_CLOSED”、“TCP_LISTEN”、“TCP_ESTABLISHED”。其他状态芯片会自动处理并更新。

5.23 CMD_GET_INT_STATUS_SN

该命令用于获取 Socket 的中断状态,需要输入 1 个字节的 Socket 索引值CH395 收到该命令后会输出 1 个字节的 Socket 的中断码,中断码各位定义如下:

表 Socket 中断状态

名称 描述
7 - 保留
6 SINT_STAT_TIM_OUT 超时
5 - 保留
4 SINT_STAT_DISCONNECT TCP 断开
3 SINT_STAT_CONNECT TCP 连接
2 SINT_STAT_RECV 接收缓冲区非空
1 SINT_STAT_SEND_OK 发送成功
0 SINT_STAT_SENBUF_FREE 发送缓冲区空闲

① SINT_STAT_SENBUF_FREE发送缓冲区空闲中断单片机向 Socket 发送缓冲区写入数据后CH395 会将数据快速复制到内部的协议栈或者 MAC 缓冲区中,以便封装数据,当数据复制完毕后,会产生此中断,单片机可以继续向发送缓冲区写入后续数据。单片机向 Socket 发送缓冲区写入一次数据后,必须等到产生此中断后才可以写入下一次数据。 ② SINT_STAT_SEND_OK发送成功中断产生此中断表示数据包被成功发送Sokcet 每发送成功一包数据后会产生此中断。单片机向 Socket 缓冲区写入一次数据后CH395 可能会封装成若干个数据包进行发送,所以可能会产生若干次发送成功中断。 ③ SINT_STAT_CONNECTTCP 连接中断,仅在在 TCP 模式下有效。表明 TCP 连接成功,单片机必须在产生此中断后,才可以进行数据传输。 ④ SINT_STAT_DISCONNECTTCP 连接断开中断,仅在 TCP 模式下有效,表明 TCP 连接断开。

⑤ SINT_STAT_TIM_OUTTCP 模式下TCP 连接、断开、发送数据等过程中出现超时会产生此中断。IPRAW、UDP 模式下,发送数据失败也会产生此中断。

产生 SINT_STAT_DISCONNECT 和 SINT_STAT_TIM_OUT 中断后,根据 FUN_PARA_FLAG_SOCKET_CLOSE位为 1 还是为 0CH395 会做出不同的动作。如果 FUN_PARA_FLAG_SOCKET_CLOSE 为 0 则当产生上述两种中断后CH395 会主动将 Socket 状态置为关闭状态并将相关缓冲区全部清除。反之则不会对Socket 状态和相关缓冲区做任何操作,以方便外部单片机在 TCP 断开或者超时后将残留的数据读出,当外部单片机将数据读出后,必须发送关闭命令将 Socket 关闭。

5.24 CMD_SET_IP_ADDR_SN

该命令用于设置 Socket 目的 IP 地址,需要输入 1 个字节的 Socket 索引值和 4 个字节的目的 IP地址。在 Socket 工作在 IPRAW、UDP、TCP Client 模式下,必须在发送 CMD_OPEN_SOCKET_SN 命令前之前设置目的 IP。

5.25 CMD_SET_DES_PORT_SN

该命令用于设置 Socket 目的端口,需要输入 1 个字节的 Socket 索引值和 2 个字节的目的端口低字节在前。Socket 工作在 UDP、TCP Client 模式下,此值必须设置。

5.26 CMD_SET_SOUR_PORT_SN

该命令用于设置 Socket 源端口,需要输入 1 个字节的 Socket 索引值和 2 个字节的源端口(低字节在前)。如果两个或者多个 Socket 都采用相同的模式则源端口号不得相同。例如Socket 0为 UDP 模式,源端口为 600Socket 1 同样为 UDP 模式,不可以再使用源端口 600否则可能会导致打开失败。

5.27 CMD_SET_PROTO_TYPE_SN

该命令用于设置Socket工作模式需要输入1个字节的Socket索引值和1个字节的工作模式工作模式定义如下

表 Socket 工作模式

代码 名称 描述
03H PROTO_TYPE_TCP TCP 模式
02H PROTO_TYPE_UDP UDP 模式
01H PROTO_TYPE_MAC_RAW MAC 原始报文模式
00H PROTO_TYPE_IP_RAW IP 原始报文模式

此命令必须在 CMD_OPEN_SOCKET_SN 之前执行,详细步骤请参考 9.2 应用参考步骤。

5.28 CMD_OPEN_SOCKET_SN

该命令用于打开 Socket是使用 Socket 的必要步骤,需要输入 1 个字节的 Socket 索引值。在发送完此命令后单片机应该发送GET_CMD_STATUS来查询命令执行状态。在UDP、IPRAW、MACRAW模式下打开 Socket 并返回成功后,即可进行数据传输。在发送此命令前,必须对目的 IP、协议类型、源端口、目的端口等进行必要设置详细步骤请参考 9.2 应用参考步骤。

5.29 CMD_TCP_LISTEN_SN

该命令仅在 TCP模式下有效使能 Socket进入监听模式即 TCP Server模式。需要输入 1个字节的 Socket 索引,该命令必须在 OPEN_SOCKET_SN 之后执行。在发送完此命令后单片机应该发送GET_CMD_STATUS 来查询命令执行的状态。

在 TCP Server 模 式下 Socket 会一直检测连接事件 ,直到 连接成 功 后,会 产生SINT_STAT_CONNECT 中断。每个 Socket 只可以建立一个连接。如果再次接收到符合条件的连接事件Socket 将向试图连接的远端发送 TCP RESET。

5.30 CMD_TCP_CONNECT_SN

该命令仅在 TCP模式下有效使能 Socket进入连接模式即 TCP Client模式需要输入 1个字节的 Socket 索引值。在发送完此命令后,单片机应该发送 GET_CMD_STATUS 来查询命令执行的状态。

在收到此命令后Socket 将会发起连接事件,成功连接后,会产生 SINT_STAT_CONNECT 中断。如果连接过程中出现异常或者超过一定时间后未连接成功,会产生 SINT_STAT_TIM_OUT 中断。单片机接收到此中断,如果需要再次连接,需要重新打开 Socket并进行 TCP_CONNECT_SN。

5.31 CMD_TCP_DISCONNECT_SN

该命令仅在 TCP 模式下有效,用于断开当前 TCP 连接,需要输入 1 个字节的 Socket 索引值,在发送完此命令后,单片机应该发送 GET_CMD_STATUS 来查询命令执行的状态。当前的 TCP 成功断开后会产生 SINT_STAT_DISCONNECT 中断。

5.32 CMD_WRITE_SEND_BUF_SN

该命令用于向 Socket 的发送缓冲区写入数据,需要输入 1 个字节的 Socket 索引值2 个字节的长度低字节在前和若干字节的数据流。输入数据的长度不得大于发送缓冲区的大小但是在MACRAW 模式下,输入的数据的长度最大只能为 1514多余的数据将被丢弃。当外部单片机写完数据后CH395 会根据 Socket 的工作模式进行数据包的封装然后将其发送。在单片机未收到SINT_STAT_SENBUF_FREE 之前,不得向该 Socket 发送缓冲区再次写入数据。

5.33 CMD_GET_RECV_LEN_SN

该命令用于获取当前接收缓冲区的有效数据长度,需要输入 1 个字节的 Socket 索引值CH395接收到该命令后输出 2 个字节的长度(低字节在前)。

5.34 CMD_READ_RECV_BUF_SN

该命令用于从 Socket 接收缓冲区读取数据,需要输入 1 个字节的 Socket 索引值2 个字节的长度(低字节在前)CH395 会根据长度值输出若干字节的数据流。实际应用中可以先发送 RECV_LEN_SN命令来获取当前缓冲区的实际有效长度。读取的数据长度可以小于缓冲区的实际有效数据长度未读取的数据仍然保留在接收缓冲区中单片机可以通过此命令继续读取。

在 MACRAW 模式下,处理方式有所不同,在 MACRAW 模式下,接收缓冲区为帧缓冲区,只可以缓存 1 帧以太网数据CH395 在处理完 READ_RECV_BUF_SN 命令后,会将 Socket0 的接收缓冲区全部清除,所以单片机应一次将缓冲区的有效数据全部读出。

5.35 CMD_CLOSE_SOCKET_SN

该命令用于关闭 Socket需要输入 1 个字节的 Socket 索引值。在关闭 Socket 后Socket 的接收发送缓冲区被清空,但是配置信息仍然保留,下次使用该 Socket 时只需再次打开 Socket 即可。

在 TCP 模式下,关闭 Socket 前 CH395 会自动断开 TCP 连接。

5.36 CMD_SET_IPRAW_PRO_SN

该命令仅在 IPRAW 模式下有效,需要输入 1 个字节的 Socket 索引值1 个字节的 IP 包协议字段

的协议码。该命令必须在 OPEN_SOCKET_SN 之前执行。

如果多个 Socket 均采用了 IPRAW 模式,则协议码不得重复使用。例如 Socket 0 和 Socket 1 均采用了 IPRAW 模式,则两个 Socket 的协议码不得相同,否则可能会导致打开 Socket 时失败。

IPRAW数据处理优先级高于UDP和TCP所以协议码也必须不得与其他Socket相同。例如Socket0 采用 IPRAW 模式,协议码为 17UDP 协议。Socket 1 采用了 UDP 模式。这可能会导致 Socket 1 的数据被 Socket 0 接收到。

5.37 CMD_PING_ENABLE

该命令用于开启或者关闭 PING需要输入 1 个字节的标志码,标志码为 1 表示开启 PING为 0则表示关闭 PING。

5.38 CMD_GET_MAC_ADDR

该命令用于获取 MAC 地址接收到该命令后CH395 会输出 6 个字节的 MAC 地址。

5.39 CMD_DHCP_ENABLE

该命令用于启动或者停止 DHCP需要输入 1 个字节的标志码,如果标志码为 1 则表示启动 DHCP如果为 0 表示关闭 DHCP在启动 DHCP 之前必须先要对 CH395 初始化。

在启动 DHCP 后CH395 将会向网络上广播 DHCPDISCOVER 报文,用于发现 DHCP Server找到DHCP Server 后申请地址以及其他配置参数,然后产生 GINT_STAT_DHCP 中断。产生此中断后,单片机可以发送命令 GET_DHCP_STATUS 来获取 DHCP 的状态。如果状态为 0表示成功则单片机可以发送命令 GET_IP_INF 来获取 IP、MASK 等信息。如果状态为 1则表示错误一般是超时导致的例如没有发现 DHCP Server。

DHCP 在启动后,一直处于工作状态,除非接收到单片机的关闭 DHCP 的命令。在此过程中如果DHCP Server 重新给 CH395 分配了一个配置且此配置和原来不相同CH395 仍然会产生中断。

产生超时中断后,假如没有发现 DHCP ServerCH395 仍然会继续发送 DHCPDISCOVER 报文,间隔时间约为 16 秒。

此命令大约需要 1ms 执行时间,单片机可以发送 GET_CMD_STATUS 来查询是否执行完毕和执行状态。

5.40 CMD_GET_DHCP_STATUS

该命令用于获取DHCP的状态一般在单片机接收到中断后发送此命令获取DHCP的执行状态CH395 收到此命令后,将 DHCP 状态码输出,状态码有 2 个分别为 0 和 1其含义如下

如果状态为 0 表示成功,则单片机可以发送命令 GET_IP_INF 来获取 IPMASK 等信息。

如果状态为 1 则表示错误,一般是超时导致的,例如没有发现 DHCP Server。

5.41 CMD_GET_IP_INF

该命令用于获取 IP、GatewayIP、MASK、DNS 等信息收到此命令后CH395 会依次输出 20 个字节的数据分别为4 字节 IP 地址、4 字节网关 IP、4 字节子网掩码、4 字节 DNS1(主 DNS)、4 字节DNS2(次 DNS)。

在DHCP后可以发送此命令来获取当前CH395的信息。如果在DHCP中某些配置没获取到则该配置为 0例如在局域网络 DHCP 时并不一定会分配 DNS发送该命令获取配置信息时 DNS1DNS2 全为0。

5.42 CMD_SET_ARP

该命令用于设置 ARP 重传周期及次数,需要输入 1 字节的重传周期 n单位为 100ms和 1 字节的重传次数 m单位为次。CH395F、CH395A、CH395P 支持该命令。

当 CH395 向目标设备发送数据时,会检索 APR 缓存表来查找目标设备的 MAC 地址。若缓存表中没有存储CH395 会发送 ARP 请求获得目标设备的 MAC 地址。如果目标设备没有回应CH395 会按照设置的重传周期 n单位为 100ms进行重传最多重传 m 次。

默认情况下,重传次数为 3重传周期为 10即 1 秒)。若 ARP 重传次数或周期设置为0则将使用默认值。如果设置重传次数为 255则表示 CH395 会进行无限重传,直到成功获取到目标设备的 MAC 地址。

该命令应在初始化 CH395 之后设置。

5.43 CMD_SET_TCP_MSS

该命令用于设置 TCP MSS需要输入 2 字节的 TCP MSS 值,最大值为 1460最小值为 60。应该在初始化 CH395 之前设置此值,初始化之后不允许设置。

5.44 CMD_SET_TTL

该命令用于设置 Socket 的 TTL需要输入 1 字节的 Socket 索引和 1 字节的 TTL 值。应该在打开Socket 之后进行设置,最大值为 128。该命令在 Socket 作为 TCP Sever 模式时不生效。

5.45 CMD_SET_RECV_BUF

该命令用于设置Socket的接收缓冲区需要输入3字节数据第一个字节为Socket索引第二个字节为缓冲区的起始块第三个字节为块数。

第0块 第1块 第2块 ...... 第46块 第47块

CH395 内部缓冲区结构如上图,一共由 48 个块组成,每个块的长度为 512 字节。单片机可以自由分配每个 Socket 接收缓冲区的大小。CH395 初始化完成后对缓冲区的分配如下:

表 CH395 内部缓冲区

Socket 缓冲区 起始块 块数
0 接收缓冲区 0 8
发送缓冲区 8 4
1 接收缓冲区 12 8
发送缓冲区 20 4
2 接收缓冲区 24 8
发送缓冲区 32 4
3 接收缓冲区 36 8
发送缓冲区 44 4
4 接收缓冲区 NULL(空,未分配,下同) 0
发送缓冲区 NULL 0
5 接收缓冲区 NULL 0
发送缓冲区 NULL 0
6 接收缓冲区 NULL 0
发送缓冲区 NULL 0
7 接收缓冲区 NULL 0
发送缓冲区 NULL 0

由上表可以看出CH395初始化完成后将所有的缓冲区分配给Socket03接收缓冲区为8块4KB发送缓冲区为 4 块2KB。如果单片机需要用到的 Socket 个数大于 4需要重新对缓冲区进行分配。

5.46 CMD_SET_SEND_BUF

该命令用于设置 Socket 的发送缓冲区,需要输入 3 字节数据,第 1 个字节为 Socket 索引,第 2个字节为缓冲区的起始块第 3 个字节为块数。

关于缓冲区的定义和分配请参考 5.45 章节。

5.47 CMD_EEPROM_ERASE

该命令用于擦除 EEPROMCH395 芯片自带 4KB 的 EEPROM擦除后数据全部为 0XF5。在对 EEPROM写操作前必须保证目的区域的数据全部为 0XF5。该命令需要约 21us 执行完毕。

5.48 CMD_EEPROM_WRITE

该命令用于写 EEPROM需要输入 2 个字节的地址、1 个字节的长度和若干字节的数据流,字节流的长度不得大于 64 字节。该命令需要约 6.5us 执行完毕。

5.49 CMD_EEPROM_READ

该命令用于读EEPROM需要输入2个字节的地址和1个字节的长度CH395根据长度输出若干字节的数据流长度值不得大于 64 字节。外部单片机在发送完长度后,应该等待 27us 再读取数据。该命令需要约 5.2us 执行完毕。

5.50 CMD_READ_GPIO_REG

该命令用于读GPIO寄存器需要输入1个字节的寄存器地址CH395输出1个字节的寄存器值。所有的寄存器都是 8 位bit07 分别对应 GPIO 07其地址及含义如下表

表 GPIO 寄存器

地址 名称 描述
80H GPIO_DIR_REG 方向寄存器,1:输出;0:输入
81H GPIO_IN_REG 输入数据寄存器
82H GPIO_OUT_REG 输出数据寄存器
83H GPIO_CLR_REG 0:保持;1:清除
84H GPIO_PU_REG 下拉寄存器,1:上拉使能;0:上拉禁止
85H GPIO_PD_REG 上拉寄存器,1:下拉使能;0:下拉禁止

CH395 有 8 路 GPIOGPIO3 默认为输出,在 CH395 初始化成功后,输出低电平,其余 GPIO 默认为输入状态。

5.51 CMD_WRITE_GPIO_REG

该命令用于写 GPIO 寄存器,需要输入 1 个字节的寄存器地址和 1 个字节的寄存器值。

关于 GPIO 寄存器的定义参考 5.50 章节。

5.52 CMD_SET_FUN_PARA

该命令用于设置功能参数,需要输入 4 字节的参数,参数各位表示的含义如下:

表 功能参数

Bit 名称 复位值 描述
[31:8] - - 保留,必须为0
8 FUN_PARA_FLAG_UART_FLOW_CONTROL 0 串口流控使能位,仅CH395F支持
7 FUN_PARA_FLAG_UART_FAST_DEAL 0 串口快速回复使能位,0x4A及以后版本支持
[5:6] - - 保留,必须为0
4 FUN_PARA_FLAG_DISABLE_SEND_OK 0 禁用Socket SEND_OK中断,0x46及以后版本支持
3 FUN_PARA_FLAG_SOCKET_CLOSE 0 Socket关闭模式,0x46及以后版本支持
2 - - 保留,必须为0
1 FUN_PARA_FLAG_TCP_SERVER 0 TCP服务器多连接模式使能位,0x44及以后版本支持
0 - - 保留,必须为0

① FUN_PARA_FLAG_TCP_SERVERTCP 服务器多连接模式使能位,此位为 1TCP 服务器可以连接多个客户端,使用方法请参考 9.2.6,全局配置,对所有的 Socket 有效。 ② FUN_PARA_FLAG_SOCKET_CLOSE 本 参 数 主 要 用 于 TCP 此 位 为 0 表 示 在 产 生SINT_STAT_DISCONNECT 或者 SINT_STAT_TIM_OUT 中断后CH395 会主动关闭 Socket。此位为 1 表示在产生上述两个中断后由外部单片机来关闭 Socket。关闭 Socket 就意味着 CH395 会将此 Socket 内部缓冲区和一些相关变量清除,在某些应用中,如果 CH395 内部自行关闭 Socket 可能会导致残留的数据被强行清除。这种情况下可以将该位置 1由单片机将数据读出来然后再关闭 Socket。 ③ FUN_PARA_FLAG_DISABLE_SEND_OK禁用 SINT_STAT_SEND_OK 中断。此位为 1CH395 则不再产生 SINT_STAT_SEND_OK 中断。 ④ FUN_PARA_FLAG_UART_FAST_DEAL对于有数据输出的串口命令此位为 0 时CH395 在接受完数据后会间隔4字节串口数据超时时间+TSC时间再输出数据此位为1时CH395在接受完数据后仅间隔 TSC 时间回复数据。 ⑤ FUN_PARA_FLAG_UART_FLOW_CONTROL串口流控使能位仅适用于 CH395F。当该位设置为 1时CH395F 的 CTS 和 RTS 引脚将被用作硬件流控信号,实现串口通信的硬件流控机制。 ⑥ 注意CMD_SET_FUN_PARA 命令必须在初始化之前设置,且一旦初始化完毕后,不可以再随意设置。另外需要注意参数适用的版本号。

5.53 CMD_SET_KEEPALIVE_IDLE

该命令用于设置Keepalive空闲时间需要输入4字节的时间值单位为ms。该命令仅用于TCP连接。Keepalive 空闲时间是指 TCP 连接无数据收发后至发送 Keepalive 数据包的时间。默认值为20000。

5.54 CMD_SET_KEEPALIVE_INTVL

该命令用于设置Keepalive超时时间需要输入4字节的时间值单位为ms。该命令仅用于TCP连接。Keepalive 超时时间是指 Keepalive 数据包发送后等待应答的时间。默认值为 15000。

5.55 CMD_SET_KEEPALIVE_CNT

该命令用于设置 Keepalive 超时次数,需要输入 1 字节的超时次数。该命令仅用于 TCP 连接。Keepalive 超时次数是指允许 Keepalive 数据包连续无应答的最大次数。默认值为 9。

假设 Keepalive 空闲时间为 IDLE超时时间为 INTVL超时次数为 CNT。

如果 Socket 连接启动了 Keepalive 功能,则当 TCP 连接空闲无数据收发IDLEms 时Socket会启动发送 Keepalive 包,如果远端在 INTVLms 内应答 ACK则认为该连接正常。否则 Socket 在INTVLms 后认为超时,再次启动发送 Keepalive 包,如果 CNT 次内都没有收到 ACK 包,则认为当前连接断开,会产生 SINT_STAT_TIM_OUT 或 SINT_STAT_DISCONNECT 中断。

如果需要配置 IDLEINTVLCNT 三个变量,需要注意 IDLE 必须大于 INTVL且均为 500 的倍数。

5.56 CMD_SET_KEEPALIVE_SN

该命令用于开启或者关闭Socket的 Keepalive功能需要输入1字节的 Socket索引和 1字节的配置值配置值为 0 表示关闭 Socket 的 Keepalive 功能1 为开启。默认为关闭。

当 Socket 为 TCP 客户端时,创建 Socket 后使用此命令打开 Keepalive 功能。

当 Socket 为 TCP 服务器时,在产生 SINT_STAT_CONNECT 后使用此命令打开 Keepalive 功能。

6、功能说明

6.1 单片机通讯接口

CH395 与单片机之间支持三种通讯接口8 位并行接口、SPI 同步串行接口、异步串口。在芯片上电复位时CH395 将采样 SEL 和 TXD 引脚的状态,根据这 2 个引脚状态的组合选择通讯接口,参考下表(表中 X 代表不关心此位0 代表低电平1 代表高电平或者悬空。SEL 和 TXD 引脚内置上拉电阻,默认选择异步串口。可通过将 SEL 或 TXD 引脚直接接地以设置为低电平,从而选择所需的通信接口。

表 接口选择

SEL 引脚 TXD 引脚 选择通讯接口
1 1 异步串口
1 0 SPI 接口
0 1 8 位并口
0 0 错误接口

CH395 芯片 INT#引脚输出的中断请求默认是低电平有效,可以连接到单片机的中断输入引脚或普通输入引脚,单片机可以使用中断方式或查询方式获知 CH395 的中断请求。

6.2 SPI 串行接口

SPI 同步串行接口信号线包括SPI 片选输入引脚 SCS、串行时钟输入引脚 SCK、串行数据输入引脚 SDI、串行数据输出引脚 SDO。通过 SPI 接口CH395 可以用较少的连线挂接到各种单片机、DSP、MCU 的 SPI 串行总线上。

CH395 的 SPI 接口支持 SPI 模式 0 和 SPI 模式 3CH395 总是从 SPI 时钟 SCK 的上升沿输入数据,并在允许输出时从 SCK 的下降沿输出数据,数据位顺序是高位在前(MSB first),计满 8 位为一个字节。

6.2.1 SPI 操作步骤

SPI 的操作步骤是:

① 单片机产生 CH395 芯片的 SPI 片选,低电平有效; ② 单片机按 SPI 输出方式发出一个字节的数据CH395 总是将 SPI 片选 SCS 有效后收到的首个字节作为命令码,后续字节作为数据; ③ 单片机延时 TSC 时间(约 0.6us)等待 CH395 的 SPI 接口空闲; ④ 如果是写操作,单片机向 CH395 发出一个字节的待写数据,等待 SPI 接口空闲后单片机继续发出若干个字节的待写数据CH395 依次接收,直到单片机禁止 SPI 片选; ⑤ 如果是读操作,单片机从 CH395 接收一个字节的数据,等待 SPI 接口空闲后单片机继续从CH395 接收若干个字节的数据,直到单片机禁止 SPI 片选; ⑥ 单片机禁止 CH395 芯片的 SPI 片选,以结束当前 SPI 操作。

下图是 SPI 接口的逻辑时序图,图 6-1 为发出命令 12H 并写入数据 34H图 6-2 为发出命令 28H并读出数据 78H。

图 示例 1

![](https://lsky.bitnasdaq.vip/9TnIMe.jpg)

图 示例 2

![](https://lsky.bitnasdaq.vip/vsEYWk.jpg)

6.3 异步串口

异步串口信号线包括:串行数据输入引脚 RXD 和串行数据输出引脚 TXD。通过串行接口CH395可以用最少的连线与单片机、DSP、MCU 进行点对点连接。

CH395F 支持串口硬件流控(清除发送输入引脚 CTS、发送请求输出引脚 RTS和 RS485 收发自动切 换( 发送 状态 输出脚 TNOW。默 认情 况下 ,流 控功 能处 于禁用 状态 ,但 可 以 通 过CMD_SET_FUN_PARA 命令启用该功能,以实现硬件流控机制。

CH395 的串行数据格式是标准的字节传输模式,包括 1 个起始位、8 个数据位、1 个停止位。

CH395 既支持硬件设定默认的串行通讯波特率,也支持单片机随时通过 CMD_SET_BAUDRATE 命令选择合适的通讯波特率。每次上电复位后CH395默认的串行通讯波特率由 SDO、SDI、SCK 三个引脚的电平组合设定,参考下表(表中 0 代表低电平1 代表高电平或者悬空。SDO、SDI、SCK 引脚悬空默认选择 9600bps。

CH395 串口发送信号的波特率误差小于 0.3%,串口接收信号的允许波特率误差不大于 2

表 波特率选择

SDO 引脚 SDI 引脚 SCK 引脚 上电复位后默认的串行通讯波特率
1 1 1 9600bps
1 1 0 57600bps
1 0 1 115200bps
1 0 0 460800bps
0 1 1 250000bps
0 1 0 1Mbps
0 0 1 2Mbps
0 0 0 921600bps

为了区分命令码和数据CH395 要求单片机先通过串口发送两个同步码字节57H 和 ABH然后再发送命令码接着是发送数据或者接收数据。CH395会检查上述两个同步码字节之间、同步码与命令码之间的间隔时间如果间隔时间大于串口输入超时时间 SER_CMD_TIMEOUT约 40ms那么CH395 将丢弃该同步码及命令包。

对于有返回数据的串口命令CH395 在接收到命令后,会在约 TE7 时间后(见表 7-4返回数据。

6.3.1 串口操作步骤

串口命令操作步骤如下:

① 单片机通过串口向 CH395 发出第一同步码 57H ② 单片机向 CH395 发出第二同步码 ABH ③ 单片机向 CH395 发出命令码; ④ 如果该命令具有输入数据,那么依次向 CH395 发出输入数据,每次一个字节; ⑤ 如果该命令具有输出数据,那么依次从 CH395 接收输出数据,每次一个字节。

下图为串口的逻辑时序图。

图 示例 3

![](https://lsky.bitnasdaq.vip/ZzMQVu.jpg)

6.4 8 位并行接口

并口信号线包括8 位双向数据总线 D7D0、读选通输入引脚 RD#、写选通输入引脚 WR#、片选输入引脚 PCS#以及地址输入引脚 A0。CH395 芯片的 PCS#用于当单片机具有多个外围器件时进行设备选择。通过被动并行接口CH395 芯片可以很方便地挂接到各种 8 位单片机、DSP、MCU 的系统总线上,并且可以与多个外围器件共存。

对于类似 Intel 并口时序的单片机CH395 芯片的 RD#引脚和 WR#引脚可以分别连接到单片机的读选通输出引脚和写选通输出引脚。对于类似 Motorola 并口时序的单片机CH395 芯片的 RD#引脚应该接低电平,并且 WR#引脚连接到单片机的读写方向输出引脚 R/-W。

下表为并口 I/O 操作的真值表(表中 X 代表不关心此位Z 代表 CH395 三态禁止)。

表 并口操作真值表

PCS# WR# RD# A0 D7-D0 对 CH395 芯片的实际操作
1 X X X X/Z 未选中 CH395,不进行任何操作。
0 1 1 X X/Z 虽然选中但无操作,不进行任何操作。
0 0 1/X 1 输入 向 CH395 的命令端口写入命令码。
0 0 1/X 0 输入 向 CH395 的数据端口写入数据。
0 1 0 0 输出 从 CH395 的数据端口读出数据。
0 1 0 1 输出 从 CH395 的命令端口读取接口状态:位 7 是中断标志,低有效,等效于 INT#引脚。

6.4.1 并口操作步骤

CH395 A0 引脚为高电平时选择命令端口,可以写入新的命令,或者读出接口状态;当 A0 引脚为低电平时选择数据端口,可以读写数据。

单片机通过 8 位并口对 CH395 芯片进行读写,所有操作都是由一个命令码、若干个输入数据和若干个输出数据组成,部分命令不需要输入数据,部分命令没有输出数据。命令操作步骤如下:

① 单片机在 A0=1 时向命令端口写入命令代码; ② 单片机延时 TSC 时间(约 0.6us)等待 CH395 的并口空闲; ③ 如果该命令具有输入数据,那么在 A0=0 时依次写入输入数据,每次一个字节; ④ 如果该命令具有输出数据,那么在 A0=0 时依次读取输出数据,每次一个字节。

6.5 其他硬件

CH395 芯片内部集成了 10M/100M 以太网 PHY、MAC、串口、SPI-Slave 控制器、被动并行接口、SRAM、高速 MCU 和 PLL 倍频器、电源上电复位电路等。

CH395 芯片内置了电源上电复位电路,也可通过 RSTI 引脚拉低控制复位。RSTI 引脚用于从外部输入异步复位信号;当 RSTI 引脚为低电平时CH395 芯片被复位;当 RSTI 引脚恢复为高电平后CH395 将进入初始化阶段约 15ms在这段时间内主机禁止操作 CH395。

7、参数

7.1 绝对最大值(临界或者超过绝对最大值将可能导致芯片工作不正常甚至损坏)

表 绝对最大值

名称 参数说明 最小值 最大值 单位
T_A 工作时的环境温度 -40 85 °C
T_J 结温度范围 -40 100 °C
T_S 存储时的环境温度 -55 150 °C
V_{CC33} 工作电源电压 -0.4 4.0 V
V_{CC10} I/0 电源电压 -0.4 4.0 V
V_{DDK} 内核模拟电路的电源退耦端 -0.4 1.5 V
V_{ETH} ETH 物理信号引脚上的电压 -0.4 V_{CC33}+0.4 V
V_{IN} 其它 I/0 引脚上的输入电压 -0.4 V_{CC10}+0.4 V
V_{ESD(HBM)} 普通 I/0 引脚的 ESD 静电放电电压(HBM) 6K V
I_{IO} I/0 引脚上的吸收电流 20 mA
I/0 引脚上的输出电流 20

7.2 电气参数

表 电气参数 ( V _ { \tt c c 3 3 } = 3 . 3 V , V _ { \tt c c 1 0 } = 3 . 3 V , T _ { \tt A } = 2 5 ^ { \circ } C )

名称 参数说明 最小值 典型值 最大值 单位
V_{CC33} 工作电源电压 3.2 3.3 3.4 V
V_{CC10} I/0 电源电压 1.7 3.3 3.6 V
V_{IL} I/0 引脚,输入低电平电压 V_{CC10} = 3.3V 0 0.8 V
V_{CC10} = 1.8V 0 0.6
V_{IH} I/0 引脚,输入高电平电压 V_{CC10} = 3.3V 2.0 V_{CC10} V
V_{CC10} = 1.8V 1.2 V_{CC10}
V_{OL} 低电平输出电压,单个引脚吸收 5mA 电流 0.4 0.6 V
V_{OH} 高电平输出电压,单个引脚输出 5mA 电流 V_{CC10}-0.6 V_{CC10}-0.4 V
V_{hys} I/0 施密特触发器电压迟滞 150 mV
C_{10} I/0 引脚电容 5 pF
R_{PU} 上拉等效电阻 30 40 55
R_{PD} 下拉等效电阻 30 40 55

注:以上均为设计参数保证。

7.3 功耗

表 功耗 ( V _ { \mathbb { C } \mathbb { C } 3 3 } = 3 . 3 V , ~ V _ { \mathbb { C } \mathbb { C } 1 0 } = 3 . 3 V , ~ \mathsf { T } _ { \mathtt { A } } = 2 5 ^ { \circ } \mathsf { C } )

符号 参数 条件(所有电流,含网络变压器) 典型值 单位
I_{DD0} 传输状态下的供应电流 100BASE-TX 通路链接成功并且在收发通道上有数据包 74.9 mA
10BASE-TX 通路链接成功并且在收发通道上有数据包 46.8
I_{DD1} 空闲状态下的供应电流 100BASE-TX 通路链接成功并且在收发通道上无任何数据包 74.9 mA
10BASE-TX 通路链接成功并且在收发通道上无任何数据包 47.5
I_{DD2} 断开状态下的供应电流 100BASE-TX 和 10BASE-TX 通路均未链接成功且 PHY 处于自动协商状态。 54.4 mA
I_{DD3} 睡眠功耗 380 uA

7.4 控制时序参数

表 控制时序参数

名称 参数说明 条件 典型值 单位
TWAK 从低功耗状态退出的唤醒时间 100 us
TE0 CMD_RESET_ALL 命令的执行时间 15 ms
TE1 CMD_INIT_CH395 命令的执行时间 5 ms
TE2 CMD00_EEPROM_ERASE 命令的执行时间 21.1 us
TE3 CMD30_EEPROM_WRITE 命令的执行时间 6.5 us
TE4 CMD30_EEPROM_READ 命令的执行时间 5.2 us
TE5 CMD_SET_MAC_ADDR 命令的执行时间 30 us
TE6 其余命令的执行时间 1.5 us
TE7 串口模式下命令数据返回时间 见注1 -
TE8 CMD_SET_BAUDRATE 命令的执行时间 见注2
TUC 串口模式下传输命令码与数据间所需间隔 0 us
TUD 串口模式下传输数据字节间所需间隔 0 us
TSC SPI 或并口模式下传输命令码与数据间所需间隔 读写收发缓存区 见表7-5 us
其他命令 0.6
TSD SPI 或并口模式下传输数据字节间所需间隔 读写收发缓存区 见表7-5 us
其他命令 0.3

1、对于有数据输出的串口命令CH395接收完数据后会间隔TE7时间再输出数据。TE7时间由CMD_SET_FUN_PARA命令的bit7决定。默认为0时TE7时间约为4字节串口数据的超时时间加上TSC时间计算公式为4*(10/BaudRate)+TSC单位秒)。例如波特率为921600 时超时时间约为4*(10/921600)+0.0000006≈0.000044秒44us)bit7为1时则返回时间仅为TSC 时间0.6us)。 2、TE8时间为TE7+1ms。

SPI 或并口模式下 CH395 读写收发缓存区命令只需确保在长度和数据间间隔 TSL 时间即可,其他所有字节间均无需间隔。

表 读写收发缓存区时序参数

名称 参数说明 条件 典型值 单位
TSL SPI 或并口模式下传输长度与数据间所需间隔 读接收缓存区 0.4 us
写发送缓存区 0.2

图 SPI 模式写发送缓存区

![](https://lsky.bitnasdaq.vip/7FQ5tH.jpg)

text_image

SCK SCS SDI 0x39 Socket号 长度[7:0] 长度[15:8] 数据0 数据n SDO

图 SPI 模式读接收缓存区

![](https://lsky.bitnasdaq.vip/255mRJ.jpg)

text_image

SCK SCS SDI SDO 0x3C Socket号 长度[7:0] 长度[15:8] 数据0 数据n TSL

图 并口模式写发送缓存区

![](https://lsky.bitnasdaq.vip/uMdQpC.jpg)

图 并口模式读接收缓存区

![](https://lsky.bitnasdaq.vip/gjw5BJ.jpg)

7.5 交流电气特性和时序

7.5.1 SPI 时序

图 SPI 模式 0 时序图

![](https://lsky.bitnasdaq.vip/ChpY9y.jpg)

图 SPI 模式 3 时序图

![](https://lsky.bitnasdaq.vip/1SNqAJ.jpg)

表 SPI 参数表 ( \mathsf { V } _ { \mathbb { C } \mathbb { S } 3 } = 3 . 3 \mathsf { V } \mathsf { V } _ { \mathtt { C C I 0 } } = 3 . 3 \mathsf { V } { \bar { \mathsf { T } } } _ { \mathsf { A } } = 2 5 ^ { \circ } { \mathsf { C } } )

符号 参数 条件 最小值 最大值 单位
f_{SCK} SPI 的 SCK 时钟频率 40 MHz
t_{SU(SCS)} SCS 建立时间 17 ns
t_{h(SCS)} SCS 保持时间 17 ns
t_{SU(SDI)} 数据输入建立时间 4 ns
t_{h(SDI)} 数据输入保持时间 2 ns
t_{a(SDO)} 数据输出访问时间 0 8 ns
t_{dis(SDO)} 数据输出禁止时间 0 10 ns

7.5.2 并口时序

图 并口模式时序图

![](https://lsky.bitnasdaq.vip/76jumb.jpg)

表 并口参数表 ( \mathsf { V } _ { \mathsf { c c 3 3 } } = 3 . 3 \mathsf { V } \mathsf { V } _ { \mathtt { C C I 0 } } = 3 . 3 \mathsf { V } { \bar { \mathsf { T } } } _ { \mathsf { A } } = 2 5 ^ { \circ } { \mathsf { C } } )

符号 参数 条件 最小值 最大值 单位
t_{CR} PCS#建立时间 1 ns
t_{RC} PCS#保持时间 0 ns
t_{ADDRS} 地址建立时间 1 ns
t_{WDATAS} 数据输入建立时间 1 ns
t_{WDATAH} 数据输入保持时间 10 ns
T_{RDATAD} 数据输出延时时间 15 ns
t_{RDN} RD#高电平保持时间 25 ns
t_{RD} RD#低电平保持时间 30 ns
t_{WRN} WR#高电平保持时间 25 ns
t_{WR} WR#低电平保持时间 30 ns
t_{RWC} 读写周期时间 70 ns
t_{CSN} CS 高电平保持时间 35 ns

7.5.3 振荡器及晶振时序

表 振荡器及晶振时序参数表

符号 参数 条件 最小值 典型值 最大值 单位
TCKF 晶体频率 建议 30ppm 内 24.999 25 25.001 MHz
TPWH 时钟脉冲宽度高 15 20 25 ns
TPWL 时钟脉冲宽度低 15 20 25 ns

XI和X0引脚已分别内置负载电容12pF的外部晶体所需的两个振荡电容外部只需要晶体如果另选负载电容20pF的外部晶体那么XI和X0需要分别对地额外加15pF的振荡电容。

7.5.4 复位时序

表 复位时序参数表

符号 参数 最小值 典型值 最大值 单位
t_{RSTTEMP0} RSTI 低电平宽度 1 us
t_{RSTTEMP1} RSTI 高电平至主机可操作 12 15 19 ms
t_{RSTTEMP2} 复位命令生效至主机可操作 12 15 19 ms
t_{RSTTEMP3} 电源上电复位至主机可操作 27 30 35 ms

8、封装信息

说明:尺寸标注的单位是 mm毫米

引脚中心间距是标称值没有误差除此之外的尺寸误差不大于±0.2mm。

8.1 QFN32

8.2 LQFP64M

8.3 LQFP128

9、应用

9.1 应用基础

CH395 内部集成了 IPv4、ARP、ICMP、UDP、TCP 等协议。

TCP 和 UDP 是两种比较重要的传输层协议,两者都使用 IP 作为网络层协议。

TCP 是一种面向连接的传输,能够提供可靠的字节流传输服务。

UDP 是一种简单的面向数据报的运输层协议,与 TCP 不同的是 UDP 无法保证数据报文准确达到目的地。

TCP为网络设备提供高可靠性通信负责将应用层数据分段传递至网络层、确认接收分组、设置超时等功能从而实现端到端的可靠传输使应用层无需关注底层细节。相比之下UDP提供简单、快速的服务仅负责将数据报从一个网络终端传输到另一个终端不保证数据报送达可靠性需由应用层自行实现。TCP 和 UDP 的数据均通过网络层的 IP 协议完成传输。

ICMP 是 IP 协议的附属协议IP 层用它来与其他主机或者路由器交换错误报文或者其他重要信息例如CH395产生不可达中断就是通过ICMP来进行错误报文交换的。PING也使用了ICMP协议。

ARP 为地址解析协议,用来转换 IP 层和网络接口层使用的地址。

9.2 应用参考步骤

本章节介绍常用的操作步骤,具体可以参考例子程序。

9.2.1 初始化 CH395必要操作

① 发送命令 CMD_SET_MAC_ADDR 设置 CH395 的 MAC 地址;

② 发送命令 CMD_SET_IP_ADDR 设置 CH395 的 IP 地址;

③ 发送命令 CMD_SET_GWIP_ADDR 设置 CH395 的网关 IP 地址;

④ 发送命令 CMD_SET_MASK_ADDR 设置 CH395 的子网掩码;

⑤ 发送命令 CMD_INIT_CH395 对 CH395 初始化;

⑥ 延时 2ms 以上发送命令 CMD_GET_CMD_STATUS 获取 CMD_INIT_CH395 执行状态如果返回CH395_ERR_BUSY 表示 CH395 内部正在执行命令,需要再次执行⑥;如果返回 CH395_ERR_SUCCESS 表示命令执行成功。CMD_INIT_CH395 一般需要 5ms 才能执行完毕。

步骤①一般不需要CH395 在出厂时,已经烧录了 IEEE 分配的 MAC 地址。

如果需要启动 DHCP则步骤②-④不需要。

上述步骤④为可选操作,默认子网掩码为 255.255.255.0 一般不需要设置。

CH395 接收到 CMD_INIT_CH395 命令后,初始化内部 TCP/IP 协议栈,初始化 MAC 和 PHY此时 MAC和 PHY 会被初始化为自动协商模式。如果需要 PHY 工作在其他模式,如 10M 全双工模式则需要在CMD_INIT_CH395 成功执行之后,发送 CMD_SET_PHY 命令进行设置。

9.2.2 初始化 Socket 为 MACRAW 模式

初始化步骤如下:

① 发送命令 CMD_SET_PROTO_TYPE_SN 设置 Socket 工作在 MACRAW 模式;

② 发送命令 CMD_OPEN_SOCKET_SN 打开 Socket

③ 延时 2ms 以上发送命令 CMD_GET_CMD_STATUS 获取 CMD_OPEN_SOCKET_SN 执行状态如果返回CH395_ERR_BUSY 表示 CH395 内部正在执行命令,需要再次执行③;如果返回 CH395_ERR_SUCCESS 表示命令执行成功。其他值表示打开 Socket 失败。

IEEE802.3 以太网帧格式:

目的 MAC 源 MAC 类型 数据 CRC32
6Byte 6Byte 2Byte 46-1500Byte 4Byte

在 MACRAW 模式下CH395 会透明传输以太网和单片机之间的数据,不会对数据进行 TCP/IP 封装CH395 接收数据时会对以太网冗余校验 CRC32 进行校验如果校验错误数据包不会转发给单片机。CH395 发送数据时会在数据包尾部加入以太网冗余校验 CRC32。单片机每次向 CH395 写入的数据长度不得大于 1514CH395 会将单片机每次写入的数据封装成一帧数据进行发送。当 CH395 从以太网收到数据后会通知单片机,此时单片机应立即将所有数据从 CH395 内部接收缓冲区读走。

仅 Socket0 可以设置此模式,且其他 Socket 将不可用。

9.2.3 初始化 Socket 为 IPRAW 模式

初始化步骤如下:

① 发送命令 CMD_SET_PROTO_TYPE_SN 设置 Socket 工作在 IPRAW 模式; ② 发送命令 CMD_SET_IP_ADDR_SN 设置目的 IP 地址; ③ 发送命令 CMD_SET_IPRAW_PRO_SN 设置协议字段; ④ 发送命令 CMD_OPEN_SOCKET_SN 打开 Socket ⑤ 延时 2ms 以上发送命令 CMD_GET_CMD_STATUS 获取 CMD_OPEN_SOCKET_SN 执行状态如果返回CH395_ERR_BUSY 表示 CH395 内部正在执行命令,需要再次执行⑤;如果返回 CH395_ERR_SUCCESS 表示命令执行成功,其他值表示打开 Socket 失败。

IP 报文结构:

目的 MAC 源 MAC 类型 IP 首部 IPRAW 数据 CRC32
6Byte 6Byte 2Byte 20Byte 最大 1480Byte 4Byte

单片机向 CH395 写入若干字节数据流后CH395 将此 Socket 的协议字段封装在 IP 首部,并将数据流封装在 IPRAW 数据部分进行发送。IPRAW 一包允许发送的最大长度为 1480 字节,如果单片机写入的数据流长度大于 1480 字节CH395 会将数据流封装成若干个 IP 包进行发送且每包成功发送后都会产生 SINT_STAT_SEND_OK 中断。单片机每次写入的字节长度不得大于发送缓冲区长度且收到SINT_STAT_SENBUF_FREE 中断后才可以进行下一次写数据。如果产生 SINT_STAT_TIM_OUT 中断表示数据发送失败,导致发送数据失败一般有以下两个原因:

① 如果目的 IP 地址和 CH395 在同一个子网,则可能目的 IP 地址的网络设备不在线。 ② 如果目的 IP 地址和 CH395 不在同一个子网,则可能 CH395 的网关不在线。

当CH395收到IP数据包后首先检测协议字段和Socket设置的协议字段是否相同如果相同则将 IPRAW 数据包复制到接收缓冲区中并产生 SINT_STAT_RECV 中断,单片机收到此中断后,可以发送命令 CMD_GET_RECV_LEN_SN 来获取接收缓冲区数据的长度,然后发送命令 CMD_READ_RECV_SN 来读取缓冲区的数据。单片机可以一次将所有数据读出也可以分多次读取,由于 IPRAW 模式下 CH395 无法进行流控,建议单片机查询到接收数据中断口后应立即将所有数据读出,以免被后续的数据覆盖。

关于协议字段设置的注意事项

CH395 处理 IPRAW 的优先级高于 UDP 和 TCP如果 IP 协议字段设置为 17(UDP)或者 6(TCP),则可能存在和其他 Socket 冲突的可能性,在使用时应当注意避免,下面列举两种情况进行说明:

① Socket0 设置为 IPRAW 模式IP 协议字段为 17Socket1 为 UDP 模式。在 UDP 模式下IP 包的协议字段也是 17这样就会导致 Socket1 通讯的数据会被 Socket0 拦截,无法接收到数据。 ② Socket0 设置为 IPRAW 模式IP 协议字段为 6Socket1 为 TCP 模式。在 TCP 模式下IP 包的协议字段也是 6这样就会导致 Socket1 通讯的数据会被 Socket0 拦截,无法接收到数据。

9.2.4 初始化 Socket 为 UDP 模式

初始化步骤如下:

① 发送命令 CMD_SET_PROTO_TYPE_SN 设置 Socket 工作在 UDP 模式; ② 发送命令 CMD_SET_IP_ADDR_SN 设置目的 IP 地址; ③ 发送命令 CMD_SET_DES_PORT_SN 设置目的端口; ④ 发送命令 CMD_SET_SOUR_PORT_SN 设置源端口; ⑤ 发送命令 CMD_OPEN_SOCKET_SN 打开 Socket ⑥ 延时 2ms 以上发送命令 CMD_GET_CMD_STATUS 获取 CMD_OPEN_SOCKET_SN 执行状态如果返回CH395_ERR_BUSY 表示 CH395 内部正在执行命令,需要再次执行⑥;如果返回 CH395_ERR_SUCCESS 表示命令执行成功,其他值表示打开 Socket 失败。

UDP 报文结构:

目的 MAC 源 MAC 类型 IP 首部 UDP 首部 UDP 数据 CRC32
6Byte 6Byte 2Byte 20Byte 8Byte 最大 1472Byte 4Byte

UDP是一个简单的不可靠的面向数据报文的运输层协议传输速度较快不能保证数据能达到目的地必须由应用层来保证传输的可靠稳定。

单片机向 CH395 写入若干字节数据流后CH395 数据流封装在 UDP 数据部分进行发送。UDP 一包可以发送的最大长度为 1472 字节,如果单片机写入的数据流长度大于 1472 字节CH395 会将数据流封装成若干个 UDP 包进行发送且每包成功发送后都会产生 SINT_STAT_SEND_OK 中断。单片机每次写入的字节长度不得大于发送缓冲区长度,且收到 SINT_STAT_SENBUF_FREE 中断后才可以进行下一次写数据。如果数据发送失败会产生 SINT_STAT_TIM_OUT 中断,导致发送数据失败一般是下面两个原因:

① 如果目的 IP 地址和 CH395 在同一个子网,则可能目的 IP 地址的网络设备不在线。 ② 如果目的 IP 地址和 CH395 不在同一个子网,则可能 CH395 的网关不在线。

当 CH395 接收到 UDP 报文后,将 UDP 数据复制到 Socket 接收缓冲区中并产生 SINT_STAT_RECV 中断,单片机收到此中断后,可以发送命令 CMD_GET_RECV_LEN_SN 来获取接收缓冲区数据的长度,然后发送命令 CMD_READ_RECV_SN 来读取缓冲区的数据。由于 UDP 模式下 CH395 无法提供流控,建议接收到的数据及时快速的读完,以免被后续的数据覆盖。

CH395支持两种 UDP模式UDP 客户端和 UDP服务器。UDP客户端只能和指定的 IP和端口进行通讯UDP 服务器可以和任何远端的 IP 和端口进行通讯。

两者在使用上有些区别:

① 初始化步骤②如果目的IP地址为0XFFFFFFFF则此Socket会进入UDP服务器模式否则为 UDP 客户端模式。 ② 单片机从 CH395 读取数据,客户端模式下 CH395 直接将接收到的数据流发送给单片机,单片机可以一次将所有数据读出也可以只读出部分数据。服务器模式下 CH395 会在数据的头部添加 8 个字节的信息表,单片机可以根据信息表来获得数据包的来源信息,单片机必须一次性将数据全部读出。

数据包长度 端口 IP 地址 数据
2Byte 2Byte 4Byte NByte

③ 单片机发送数据,客户端模式下 CH395 直接将数据发送给初始化时指定的目的 IP 和端口。服务器模式下 CH395 可以将数据发送到任何 IP 和端口,单片机在发送前设置目的 IP 和目的端口即可。

9.2.5 初始化 Socket 为 TCP 客户端模式

初始化步骤如下:

① 发送命令 CMD_SET_PROTO_TYPE_SN 设置 Socket 工作在 TCP 模式; ② 发送命令 CMD_SET_IP_ADDR_SN 设置目的 IP 地址; ③ 发送命令 CMD_SET_DES_PORT_SN 设置目的端口; ④ 发送命令 CMD_SET_SOUR_PORT_SN 设置源端口; ⑤ 发送命令 CMD_OPEN_SOCKET_SN 打开 Socket

⑥ 延时 2ms 以上发送命令 CMD_GET_CMD_STATUS 获取 CMD_OPEN_SOCKET_SN 执行状态如果返回CH395_ERR_BUSY 表示 CH395 内部正在执行命令,需要再次执行⑥;如果返回 CH395_ERR_SUCCESS 表示命令执行成功,其他值表示打开 Socket 失败;

⑦ 发送命令 CMD_TCP_CONNECT_SN 进行 TCP 连接; ⑧ 延时 2ms 以上发送命令 CMD_GET_CMD_STATUS 获取 CMD_TCP_CONNECT_SN 执行状态如果返回CH395_ERR_BUSY 表示 CH395 内部正在执行命令,需要再次执行⑧;如果返回 CH395_ERR_SUCCESS 表示命令执行成功。其他值表示命令执行失败。返回 CH395_ERR_SUCCESS 仅表示命令执行成功,不代表 TCP 连接成功。如果 TCP 连接成功CH395 将会产生 SINT_STAT_CONNECT 中断。如果连接失败 CH395将产生 SINT_STAT_TIM_OUT 中断,如果需要再次连接,再次从⑤开始执行。

TCP 报文结构:

目的 MAC 源 MAC 类型 IP 首部 TCP 首部 TCP 数据 CRC32
6Byte 6Byte 2Byte 20Byte 20Byte 最大 1460Byte 4Byte

TCP 提供面向连接的,可靠的字节流服务。

CH395 产生 SINT_STAT_CONNECT 表明 TCP 连接建立,可以进行数据收发。在连接未建立前不得进行数据发送操作。

单片机向 CH395 写入若干字节数据流后CH395 数据流封装在 TCP 数据部分进行发送。TCP 一包可以发送的最大长度为 TCP MSS 个字节,如果单片机写入的数据流长度大于 TCP MSS 字节CH395 会将数据流封装成若干个 TCP 包进行发送且每包成功发送后都会产生 SINT_STAT_SEND_OK 中断。单片机每次写入的字节长度不得大于发送缓冲区长度,且收到 SINT_STAT_SENBUF_FREE 中断后才可以进行下一次写数据操作。在 TCP 模式下,如果数据发送失败会产生 SINT_STAT_TIM_OUT 中断CH395 会自动将此 Socket 关闭(在 FUN_PARA_FLAG_SOCKET_CLOSE 为 0 情况下,参考 5.51)。

当 CH395 接收到 TCP 报文后,将 TCP 数据复制到 Socket 接收缓冲区中并产生 SINT_STAT_RECV 中断,单片机收到此中断后,可以发送命令 CMD_GET_RECV_LEN_SN 来获取接收缓冲区数据的长度,然后发送命令 CMD_READ_RECV_SN 来读取缓冲区的数据。单片机可以一次将所有数据读出也可以只读出部分数据,接收缓冲区剩余空间即为 TCP 的窗口单片机每次读数据后CH395 会对接收缓冲区的剩余空间进行检查并向 TCP 服务器通告当前窗口的大小。

9.2.6 初始化 Socket 为 TCP 服务器模式

初始化步骤如下:

① 发送命令 CMD_SET_PROTO_TYPE_SN 设置 Socket 工作在 TCP 模式; ② 发送命令 CMD_SET_SOUR_PORT_SN 设置源端口 Sport ③ 发送命令 CMD_OPEN_SOCKET_SN 打开 Socket

④ 延时 2ms 以上发送命令 CMD_GET_CMD_STATUS 获取 CMD_OPEN_SOCKET_SN 执行状态如果返回CH395_ERR_BUSY 表示 CH395 内部正在执行命令,需要再次执行④;如果返回 CH395_ERR_SUCCESS 表示命令执行成功,其他值表示打开 Socket 失败。

在 TCP 服务器模式下,如果客户端进行连接,在 Socket 一直处于监听状态,不会产生超时中断,如 果 TCP 连 接 成 功 CH395 会 产 生 SINT_STAT_CONNECT 中 断 此 时 单 片 机 可 以 发 送 命 令CMD_GET_REMOT_IPP_SN 来获取客户端的 IP 地址和端口号。

默认的设置下服务器多连接功能被关闭TCP服务端模式下每个Socket只可以建立一个TCP连接。

在多连接模式使能的情况下TCP 服务器可以连接多个 TCP 连接,单片机需要设置 Socket 的源端口和服务器的源端口一致,如果 TCP 服务器监听到连接CH395 会查找当前所有的 Socket 的源端口是否和当前服务器一致,协议类型为 TCP且处于被关闭状态如果找到则立即将此 Socket 打开,将连接分配给此 Socket并通知单片机有连接事件如果没找到则将连接复位。此模式下服务器的Socket仅用来监听单片机需要分配其它Socket用于该服务器的连接。例如Socket0设置为服务器模式Socket1 和 Socket2 用于此服务器的连接,步骤如下:

Socket0 执行①-④;

⑤ 向 Socket1 发送命令 CMD_SET_SOUR_PORT_SN 设置源端口 Sport ⑥ 向 Socket1 发送命令 CMD_SET_PROTO_TYPE_SN 设置 Socket 工作在 TCP 模式; ⑦ 向 Socket2 发送命令 CMD_SET_SOUR_PORT_SN 设置源端口 Sport ⑧ 向 Socket2 发送命令 CMD_SET_PROTO_TYPE_SN 设置 Socket 工作在 TCP 模式;

关于数据结构,发送数据和接收数据流程可以参考 TCP 客户端模式。

9.2.7 DHCP

在开始下面的步骤前,首先要对 CH395 进行初始化。

DHCP 步骤如下:

① 发送命令 CMD_DHCP_ENABLE 参数为 1 启动 DHCP ② 等待 CH395 产生 GINT_STAT_DHCP 中断; ③ 等到 GINT_STAT_DHCP 中断后,发送命令 CMD_GET_DHCP_STATUS 获取 DHCP 状态如果状态码为0则表示成功单片机可以发送命令CMD_GET_IP_INF来获取IP、MASK等信息。如果状态码为1表示失败可能是 CH395 和 DHCP Server 之间的连接出现问题,例如 DHCP Server 不在线,虽然 CH395通过中断向单片机通告 DHCP 错误,但是内部仍然会一直重试来查找 DHCP Server单片机可以发送

CMD_DHCP_ENABLE 命令,参数为 0 来停止 DHCP。

9.2.8 关于 TCP MSS 和缓冲区

CH395 支持修改 TCP MSS默认的 TCP MSS 大小为 1460。一般而言 TCP MSS 越大通讯的速度和效率就越高。在对 TCP MSS 和接收缓冲区修改时应该遵循一些原则。

① (建议)接收缓冲区的长度不小于 2 倍的 TCP MSS ② (必须)接收缓冲区的长度不得小于 TCP MSS ③ (建议)接收缓冲区的长度不大于 6 倍的 TCP MSS ④ (必须)发送缓冲区大小不超过 8KB。

在对 TCP MSS 修改时尽量能大则大,如果过小可能会导致以太网上的小包数据增多,影响通讯效率。

9.3 参考电路

9.3.1 CH395F 参考电路

图 CH395F 硬件参考电路

![](https://lsky.bitnasdaq.vip/044Mjw.jpg)

CH395F 已内置了晶体 Y1 的部分振荡电容C5 和 C6 可以根据晶体参数调节。对于负载电容为12pF 的 Y1无需 C5 和 C6对于负载电容为 20pF 的 Y1C5 和 C6 建议各 15pF。

CH395F 已内置以太网 50Ω 阻抗匹配电阻,外部不要再接 49.9Ω 或 50Ω 电阻,等效于电压驱动。

T1 是 ethernet 网络变压器,其中心抽头分别通过电容 C8 和 C9 接地,不要接任何电源。

CH395F 可通过 J2、J3 跳线帽选择所需通信接口。关于接口配置详参 6.1 章节。

9.3.2 CH395A 参考电路

图 CH395A 硬件参考电路

![](https://lsky.bitnasdaq.vip/65pOUB.jpg)

CH395A 已内置了晶体 Y1 的部分振荡电容C5 和 C6 可以根据晶体参数调节。对于负载电容为12pF 的 Y1无需 C5 和 C6对于负载电容为 20pF 的 Y1C5 和 C6 建议各 15pF。

CH395A 已内置以太网 50Ω 阻抗匹配电阻,外部不要再接 49.9Ω 或 50Ω 电阻,等效于电压驱动。

T1 是 ethernet 网络变压器,其中心抽头分别通过电容 C8 和 C9 接地,不要接任何电源。

C24、C25、C26、C27、C28 需各自贴近 VCCIO 引脚放置。

CH395A 可通过 J2、J3 跳线帽选择所需通信接口。关于接口配置详参 6.1 章节。

从 CH395Q升级到 CH395A虽然两者引脚基本兼容但网络变压器等外围电路连接可能需要调整具体改动请参考 WCH 官方论坛相关文章或联系技术支持。

9.3.3 CH395P 参考电路

图 CH395P 硬件参考电路

![](https://lsky.bitnasdaq.vip/AfQDsk.jpg)

CH395P 已内置了晶体 Y1 的部分振荡电容C5 和 C6 可以根据晶体参数调节。对于负载电容为12pF 的 Y1无需 C5 和 C6对于负载电容为 20pF 的 Y1C5 和 C6 建议各 15pF。

CH395P 已内置以太网 50Ω 阻抗匹配电阻,外部不要再接 49.9Ω 或 50Ω 电阻,等效于电压驱动。

T1 是 ethernet 网络变压器,其中心抽头分别通过电容 C8 和 C9 接地,不要接任何电源。

CH395P 可通过 J2、J3 跳线帽选择所需通信接口。关于接口配置详参 6.1 章节。

从 CH395L 升级到 CH395P虽然两者引脚基本兼容但网络变压器等外围电路连接可能需要调整具体改动请参考 WCH 官方论坛相关文章或联系技术支持。