CH395INC.H 30 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378
  1. /********************************** (C) COPYRIGHT *********************************
  2. * File Name : CH395INC.H
  3. * Author : WCH
  4. * Version : V1.1
  5. * Date : 2014/8/1
  6. * Description : CH395ͷ�ļ�
  7. *
  8. **********************************************************************************/
  9. #ifndef __CH395INC_H__
  10. #define __CH395INC_H__
  11. /* ********************************************************************************************************************* */
  12. #ifdef __cplusplus
  13. extern "C" {
  14. #endif
  15. #ifndef TRUE
  16. #define TRUE 1
  17. #define FALSE 0
  18. #endif
  19. #ifndef NULL
  20. #define NULL 0
  21. #endif
  22. #ifndef UINT8
  23. typedef unsigned char UINT8;
  24. #endif
  25. #ifndef UINT16
  26. typedef unsigned short UINT16;
  27. #endif
  28. #ifndef UINT32
  29. //typedef unsigned long UINT32;
  30. #endif
  31. #ifndef INT8
  32. //typedef signed char INT8;
  33. #endif
  34. #ifndef INT16
  35. typedef signed short INT16;
  36. #endif
  37. #ifndef INT32
  38. typedef signed long INT32;
  39. #endif
  40. #ifndef UINT8V
  41. typedef unsigned char volatile UINT8V;
  42. #endif
  43. #ifndef PUINT8
  44. typedef unsigned char *PUINT8;
  45. #endif
  46. #ifndef PUINT16
  47. typedef unsigned short *PUINT16;
  48. #endif
  49. #ifndef PUINT32
  50. typedef unsigned long *PUINT32;
  51. #endif
  52. #ifndef PUINT8V
  53. typedef unsigned char volatile *PUINT8V;
  54. #endif
  55. /* ********************************************************************************************************************* */
  56. /* 命令代码 */
  57. /* 一个命令操作顺序包含:
  58. 一个命令码(对于串口方式,命令码之前还需要两个同步码),
  59. 若干个输入数据(可以是0个),
  60. 若干个输出数据(可以是0个)
  61. 命令码起名规则: CMDxy_NAME
  62. 其中的x和y都是数字, x说明最少输入数据个数(字节数), y说明最少输出数据个数(字节数), y如果是W表示需要等待命令执行成功
  63. 有些命令能够实现0到多个字节的数据块读写, 数据块本身的字节数未包含在上述x或y之内 */
  64. /* ********************************************************************************************************************* */
  65. #define CMD01_GET_IC_VER 0x01 /* 获取芯片以及固件版本号 */
  66. /* 输出: 版本号( 位7为0, 位6为1, 位5~位0为版本号 ) */
  67. /* CH3395返回版本号的值为041H即版本号为01H */
  68. #define CMD31_SET_BAUDRATE 0x02 /* 串口方式: 设置串口通讯波特率(上电或者复位后的默认波特率为9600bps */
  69. /* 输入: 3字节波特率,第字节在前 */
  70. /* 输出: 操作状态( CMD_RET_SUCCESS, 其它值说明操作未完成 ) */
  71. #define CMD00_ENTER_SLEEP 0x03 /* 进入睡眠状态 */
  72. #define CMD00_RESET_ALL 0x05 /* 执行硬件复位 */
  73. #define CMD11_CHECK_EXIST 0x06 /* 测试通讯接口以及工作状态 */
  74. /* 输入: 任意数据 */
  75. /* 输出: 输入数据的按位取反 */
  76. #define CMD02_GET_GLOB_INT_STATUS_ALL 0x19 /* 获取全局中断状态,V44版本以后的程序由于增加了socket数量需要用此命令获取全部的中断 */
  77. /*输出:全局中断状态,参考全局中断状态定义 */
  78. #define CMD10_SET_PHY 0x20 /* 设置PHY,默认为Auto,自动协商 */
  79. /* 输入:PHY参数,参考PHY参数定义 */
  80. #define CMD60_SET_MAC_ADDR 0x21 /* 设置MAC地址 必须在CMD00H_INIT_CH395之前设置完毕 */
  81. /* 输入:6字节的MAC地址 */
  82. #define CMD40_SET_IP_ADDR 0x22 /* 设置IP地址 必须在CMD00H_INIT_CH395之前设置完毕 */
  83. /* 输入:4字节的IP地址 */
  84. #define CMD40_SET_GWIP_ADDR 0x23 /* 设置网关IP地址 必须在CMD00H_INIT_CH395之前设置完毕 */
  85. /* 输入:4字节的网关IP地址 */
  86. #define CMD40_SET_MASK_ADDR 0x24 /* 设置子网掩码, 必须在CMD00H_INIT_CH395之前设置完毕 */
  87. /* 输入:4字节的子网掩码 */
  88. #define CMD90_SET_MAC_FILT 0x25 /* 设置MAC过滤 可以进行广播,多播等过滤 */
  89. /* 输入:9字节参数,第1字节为过滤类型,参考过滤类型定义,*/
  90. /* 第2至第5字节为HASH0,第6至第9字节为HASH1 */
  91. #define CMD01_GET_PHY_STATUS 0x26 /* 获取PHY当前状态,如断开连接,10/100M FULL/HALF */
  92. /* 输出:当前PHY状态,状态定义请参考PHY参数定义 */
  93. #define CMD0W_INIT_CH395 0x27 /* 初始化CH395 */
  94. /* 此命令执行时间大约200MS,需要等待此命令执行成功,才可以发下一条命令 */
  95. #define CMD08_GET_UNREACH_IPPORT 0x28 /* 获取不可达信息 */
  96. /* 输出:8字节,第1字节为不可达类型,参考不可达类型定义 */
  97. /* 第2字节协议不可达协议码 */
  98. /* 第3,4字节不可达端口 */
  99. /* 第5-8字不可达IP */
  100. #define CMD01_GET_GLOB_INT_STATUS 0x29 /* 获取全局中断状态,最大值为1S,不可以设置为0 */
  101. /* 输出:全局中断状态,参考全局中断状态定义 */
  102. #define CMD10_SET_RETRAN_COUNT 0x2A /* 重试次数,仅在TCP模式下有效 */
  103. /* 输入:重试次数 */
  104. #define CMD20_SET_RETRAN_PERIOD 0x2B /* 重试周期,最大值为20,仅在TCP模式下有效,不可以设置为0 */
  105. /* 输入:重试周期 */
  106. #define CMD01_GET_CMD_STATUS 0x2C /* 获取命令执行状态 */
  107. /* 输出:命令执行状态,参考命令执行状态定义 */
  108. #define CMD06_GET_REMOT_IPP_SN 0x2D /* 获取远端的端口以及IP地址,该命令在TCP服务器模式下使用 */
  109. /* 输出:6字节,第1-4字节为远端的IP地址,第5-6字节为远端的端口号 */
  110. #define CMD10_CLEAR_RECV_BUF_SN 0x2E /* 清除接收缓冲区 */
  111. /* 输入:第1字节为socket的索引值 */
  112. #define CMD12_GET_SOCKET_STATUS_SN 0x2F /* 获取socket n状态 */
  113. /* 输入:socket的索引值,*/
  114. /* 输出:第1字节:socket n 打开或者关闭
  115. 第2字节:TCP状态,仅在TCP模式且第1字节为打开状态下有意义 */
  116. #define CMD11_GET_INT_STATUS_SN 0x30 /* 获取socket n的中断状态 */
  117. /* 输入: socket的索引值*/
  118. /* 输出:全局中断状态,参考全局中断状态定义 */
  119. #define CMD50_SET_IP_ADDR_SN 0x31 /* 设置socket n的目的IP地址 */
  120. /* 输入:第1字节为socket的索引值,第2至5字节为IP地址 */
  121. #define CMD30_SET_DES_PORT_SN 0x32 /* 设置socket n的目的端口 */
  122. /* 输入:第1字节为socket的索引值,第2至3字节为目的端口 */
  123. #define CMD30_SET_SOUR_PORT_SN 0x33 /* 设置socket n的源端口 */
  124. /* 输入:第1字节为socket的索引值,第2至3字节为源端口 */
  125. #define CMD20_SET_PROTO_TYPE_SN 0x34 /* 设置socket n的协议类型 */
  126. /* 输入:第1字节为socket的索引值,第2协议类型,参考协议类型定义 */
  127. #define CMD1W_OPEN_SOCKET_SN 0x35 /* 打开socket n */
  128. /* 输入:第1字节为socket的索引值,此命令需要等待命令执行成功 */
  129. #define CMD1W_TCP_LISTEN_SN 0x36 /* socket n监听,收到此命令,socket n进入服务器模式,仅对TCP模式有效 */
  130. /* 输入:第1字节为socket的索引值,此命令需要等待命令执行成功 */
  131. #define CMD1W_TCP_CONNECT_SN 0x37 /* socket n连接,收到此命令,socket n进入客户端模式,仅对TCP模式有效 */
  132. /* 输入:第1字节为socket的索引值,此命令需要等待命令执行成功 */
  133. #define CMD1W_TCP_DISNCONNECT_SN 0x38 /* socket n断开连接,收到此命令,socket n断开已有连接,仅对TCP模式有效 */
  134. /* 输入:第1字节为socket的索引值,此命令需要等待命令执行成功 */
  135. #define CMD30_WRITE_SEND_BUF_SN 0x39 /* 向socket n缓冲区写入数据 */
  136. /* 输入:第1字节为socket的索引值,第2至3字节为长度 */
  137. #define CMD12_GET_RECV_LEN_SN 0x3B /* 获取socket n接收数据的长度 */
  138. /* 输入:socket的索引值 */
  139. /* 输出:2字节的接收长度 */
  140. #define CMD30_READ_RECV_BUF_SN 0x3C /* 读取socket n接收缓冲区数据 */
  141. /* 输入:第1字节为socket的索引值,第2至3字节为读取的长度n,低位在前 */
  142. /* 输出:n个数据 */
  143. #define CMD1W_CLOSE_SOCKET_SN 0x3D /* 关闭socket n */
  144. /* 输入:socket的索引值 */
  145. #define CMD20_SET_IPRAW_PRO_SN 0x3E /* 在IP RAW下,设置socket n的IP包协议类型 */
  146. /* 输入:第1字节为socket的索引值,第2字节为IP RAW协议类型 */
  147. #define CMD01_PING_ENABLE 0x3F /* 开启/关闭PING */
  148. /* 输入:1字节,0为关闭PING,1为开启PING,默认开启 */
  149. #define CMD06_GET_MAC_ADDR 0x40 /* 获取MAC地址 */
  150. /* 输出:6字节的MAC地址 */
  151. #define CMD10_DHCP_ENABLE 0x41 /* DHCP使能 */
  152. /* 输入:1字节,1启动DHCP,0关闭DHCP */
  153. #define CMD01_GET_DHCP_STATUS 0x42 /* 获取DHCP状态 */
  154. /* 输出: 1字节状态码,0表示成功,其他值失败 */
  155. #define CMD014_GET_IP_INF 0x43 /* IP,子网掩码,网关 */
  156. /* 输出:20字节,分别为4字节IP,4字节网关,4字节掩码,4字节的DNS1,4字节的DNS2 */
  157. #define CMD00_PPPOE_SET_USER_NAME 0x44 /* 设置PPPOE用户名 */
  158. /* 输入:N个字节,0为结束符 */
  159. #define CMD00_PPPOE_SET_PASSWORD 0x45 /* 设置密码 */
  160. /* 输入:N个字节,0为结束符 */
  161. #define CMD10_PPPOE_ENABLE 0x46 /* PPPOE使能 */
  162. /* 输入:1字节,1启动PPPOE,0关闭PPPOE */
  163. #define CMD01_GET_PPPOE_STATUS 0x47 /* 获取pppoe状态 */
  164. /* 输出: 1字节状态码,0表示成功,其他值失败 */
  165. #define CMD20_SET_TCP_MSS 0x50 /* 设置TCP MSS */
  166. /* 输入:TCP MSS,低位在前 */
  167. #define CMD20_SET_TTL 0x51 /* 设置TTL,TTL最大值为128 */
  168. /* 输入:第1字节为socket的索引值,第2字节为TTL值,最大为128 */
  169. #define CMD30_SET_RECV_BUF 0x52 /* 设置SOCKET接收缓冲区 */
  170. /* 输入:第1字节为socket的索引值,第2字节为起始块索引,第3字节为块数 */
  171. #define CMD30_SET_SEND_BUF 0x53 /* 设置SOCKET发送缓冲区 */
  172. /* 输入:第1字节为socket的索引值,第2字节为起始块索引,第3字节为块数 */
  173. #define CMD10_SET_MAC_RECV_BUF 0x54 /* 设置MAC接收缓冲区 */
  174. /* 输入:输入1字节的MAC接收缓冲区的大小,16字节为单位 */
  175. #define CMD40_SET_FUN_PARA 0x55 /* 设置功能参数 */
  176. /* 输入:4字节的启动参数 */
  177. #define CMD40_SET_KEEP_LIVE_IDLE 0x56 /* 设置KEEPLIVE空闲 */
  178. /*输入:4字节的保活定时器空闲时间参数,低位在前 */
  179. #define CMD40_SET_KEEP_LIVE_INTVL 0x57 /* 设置间隔时间 */
  180. /*输入:4字节的保活定时器超时间隔,低位在前 */
  181. #define CMD10_SET_KEEP_LIVE_CNT 0x58 /* 重试次数 */
  182. /*输入:1字节重试次数 */
  183. #define CMD20_SET_KEEP_LIVE_SN 0X59 /* 设置socket nkeeplive功能*/
  184. /*输入:1个字节Socket索引,1个字节设置 */
  185. #define CMD00_EEPROM_ERASE 0xE9 /* 擦除EEPROM*/
  186. #define CMD30_EEPROM_WRITE 0xEA /* 写EEPROM */
  187. /* 输入:2字节地址,1字节长度,长度必须小于64字节 */
  188. #define CMD30_EEPROM_READ 0xEB /* 读EEPROM */
  189. /* 输入:2字节地址,1字节长度,长度必须小于64字节 */
  190. #define CMD10_READ_GPIO_REG 0xEC /* 读GPIO寄存器 */
  191. /* 输入:第1个字节为REG地址,关于地址请参考相关宏定义 */
  192. #define CMD20_WRITE_GPIO_REG 0xED /* 写GPIO寄存器 */
  193. /* 输入:第1个字节为REG地址,关于地址请参考相关宏定义 */
  194. /* 第2个字节为数据 */
  195. /* 协议类型 */
  196. #define PROTO_TYPE_IP_RAW 0 /* IP层原始数据 */
  197. #define PROTO_TYPE_MAC_RAW 1 /* MAC层原始数据 */
  198. #define PROTO_TYPE_UDP 2 /* UDP协议类型 */
  199. #define PROTO_TYPE_TCP 3 /* TCP协议类型 */
  200. /* PHY 命令参数/状态 */
  201. #define PHY_DISCONN (1<<0) /* PHY断开 */
  202. #define PHY_10M_FLL (1<<1) /* 10M全双工 */
  203. #define PHY_10M_HALF (1<<2) /* 10M半双工 */
  204. #define PHY_100M_FLL (1<<3) /* 100M全双工 */
  205. #define PHY_100M_HALF (1<<4) /* 100M半双工 */
  206. #define PHY_AUTO (1<<5) /* PHY自动模式,CMD10H_SET_PHY */
  207. /*CH395 MAC过滤*/
  208. #define MAC_FILT_RECV_BORADPKT (1<<0) /* 使能接收广播包 */
  209. #define MAC_FILT_RECV_ALL (1<<1) /* 使能接收所有数据包 */
  210. #define MAC_FILT_RECV_MULTIPKT (1<<2) /* 使能接收多播包 */
  211. #define MAC_FILT_RECV_ENABLE (1<<3) /* 使能接收 */
  212. #define MAC_FILT_SEND_ENABLE (1<<4) /* 使能发送 */
  213. /* 中断状态 */
  214. /* 以下为GLOB_INT会产生的状态 */
  215. #define GINT_STAT_UNREACH (1<<0) /* 不可达中断 */
  216. #define GINT_STAT_IP_CONFLI (1<<1) /* IP冲突 */
  217. #define GINT_STAT_PHY_CHANGE (1<<2) /* PHY状态改变 */
  218. #define GINT_STAT_DHCP (1<<3) /* PHY状态改变 */
  219. #define GINT_STAT_SOCK0 (1<<4) /* socket0 产生中断 */
  220. #define GINT_STAT_SOCK1 (1<<5) /* socket1 产生中断 */
  221. #define GINT_STAT_SOCK2 (1<<6) /* socket2 产生中断 */
  222. #define GINT_STAT_SOCK3 (1<<7) /* socket3 产生中断 */
  223. #define GINT_STAT_SOCK4 (1<<8) /* scoket4 产生中断 */
  224. #define GINT_STAT_SOCK5 (1<<9) /* scoket5 产生中断 */
  225. #define GINT_STAT_SOCK6 (1<<10) /* scoket6 产生中断 */
  226. #define GINT_STAT_SOCK7 (1<<11) /* scoket7 产生中断 */
  227. /*以下为Sn_INT会产生的状态*/
  228. #define SINT_STAT_SENBUF_FREE (1<<0) /* 发送缓冲区空闲 */
  229. #define SINT_STAT_SEND_OK (1<<1) /* 发送成功 */
  230. #define SINT_STAT_RECV (1<<2) /* socket端口接收到数据或者接收缓冲区不为空 */
  231. #define SINT_STAT_CONNECT (1<<3) /* 连接成功,TCP模式下产生此中断 */
  232. #define SINT_STAT_DISCONNECT (1<<4) /* 连接断开,TCP模式下产生此中断 */
  233. #define SINT_STAT_TIM_OUT (1<<6) /* ARP和TCP模式下会发生此中断 */
  234. /* 获取命令状态 */
  235. #define CMD_ERR_SUCCESS 0x00 /* 命令操作成功 */
  236. #define CMD_RET_ABORT 0x5F /* 命令操作失败 */
  237. #define CH395_ERR_BUSY 0x10 /* 忙状态,表示当前正在执行命令 */
  238. #define CH395_ERR_MEM 0x11 /* 内存错误 */
  239. #define CH395_ERR_BUF 0x12 /* 缓冲区错误 */
  240. #define CH395_ERR_TIMEOUT 0x13 /* 超时 */
  241. #define CH395_ERR_RTE 0x14 /* 路由错误*/
  242. #define CH395_ERR_ABRT 0x15 /* 连接停止*/
  243. #define CH395_ERR_RST 0x16 /* 连接复位 */
  244. #define CH395_ERR_CLSD 0x17 /* 连接关闭/socket 在关闭状态 */
  245. #define CH395_ERR_CONN 0x18 /* 无连接 */
  246. #define CH395_ERR_VAL 0x19 /* 错误的值 */
  247. #define CH395_ERR_ARG 0x1a /* 错误的参数 */
  248. #define CH395_ERR_USE 0x1b /* 已经被使用 */
  249. #define CH395_ERR_IF 0x1c /* MAC错误 */
  250. #define CH395_ERR_ISCONN 0x1d /* 已连接 */
  251. #define CH395_ERR_OPEN 0X20 /* 已经打开 */
  252. #define CH395_ERR_UNKNOW 0xFA /* 未知错误 */
  253. /* PPP状态 */
  254. #define CH395_PPP_SUCCESS 0 /* 成功 */
  255. #define CH395_PPPERR_PARM 1 /* 无效参数 */
  256. #define CH395_PPPERR_OPEN 2 /* 无法打开PPP会话 */
  257. #define CH395_PPPERR_DEVICE 3 /* 无效的PPP设备 */
  258. #define CH395_PPPERR_ALLOC 4 /* 资源分配失败 */
  259. #define CH395_PPPERR_USER 5 /* 用户中断 */
  260. #define CH395_PPPERR_CONNECT 6 /* 连接断开 */
  261. #define CH395_PPPERR_AUTHFAIL 7 /* 挑战鉴别失败 */
  262. #define CH395_PPPERR_PROTOCOL 8 /* 握手协议失败 */
  263. #define CH395_PPPERR_TIME_OUT 9 /* 超时失败 */
  264. #define CH395_PPPERR_CLOSE 10 /* 关闭失败 */
  265. /* 不可达代码 */
  266. #define UNREACH_CODE_HOST 0 /* 主机不可达 */
  267. #define UNREACH_CODE_NET 1 /* 网络不可达 */
  268. #define UNREACH_CODE_PROTOCOL 2 /* 协议不可达 */
  269. #define UNREACH_CODE_PROT 3 /* 端口不可达 */
  270. /*其他值请参考RFC792文档*/
  271. /* 命令包头 */
  272. #define SER_SYNC_CODE1 0x57 /* 串口命令同步码1 */
  273. #define SER_SYNC_CODE2 0xAB /* 串口命令同步码2 */
  274. /* TCP状态 */
  275. #define TCP_CLOSED 0
  276. #define TCP_LISTEN 1
  277. #define TCP_SYN_SENT 2
  278. #define TCP_SYN_RCVD 3
  279. #define TCP_ESTABLISHED 4
  280. #define TCP_FIN_WAIT_1 5
  281. #define TCP_FIN_WAIT_2 6
  282. #define TCP_CLOSE_WAIT 7
  283. #define TCP_CLOSING 8
  284. #define TCP_LAST_ACK 9
  285. #define TCP_TIME_WAIT 10
  286. /* GPIO寄存器地址 */
  287. #define GPIO_DIR_REG 0x80 /* 寄存器方向寄存器,1:输出;0:输入 */
  288. #define GPIO_IN_REG 0x81 /* GPIO输入寄存器 */
  289. #define GPIO_OUT_REG 0x82 /* GPIO输出寄存器 */
  290. #define GPIO_CLR_REG 0x83 /* GPIO输出清除: 0=keep, 1=clear */
  291. #define GPIO_PU_REG 0x84 /* GPIO上拉使能寄存器 */
  292. #define GPIO_PD_REG 0x85 /* GPIO下拉使能寄存器 */
  293. /* 功能参数 */
  294. #define FUN_PARA_FLAG_TCP_SERVER (1<<1) /* tcp server 多连接模式标志,0X44版本及以后支持 */
  295. #define FUN_PARA_FLAG_LOW_PWR (1<<2) /* 低耗能模式 */
  296. #define SOCK_CTRL_FLAG_SOCKET_CLOSE (1<<3) /* CH395不主动关闭Socket */
  297. #define SOCK_DISABLE_SEND_OK_INT (1<<4) /* send ok中断控制位,为1表示关闭send ok中断 */
  298. #ifdef __cplusplus
  299. }
  300. #endif
  301. #endif
  302. /**************************** endfile *************************************/