打印
[单片机芯片]

南京沁恒微CH395Q以太网芯片调试详解

[复制链接]
3327|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
tpgf|  楼主 | 2024-7-3 19:41 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
本文详细介绍南京沁恒微电CH395Q调试过程以及步骤,并且将踩到的坑进行说明
背景介绍:
单片机采用STM32F407VET6,通过串口的方式与CH395Q进行通讯,利用CH395Q芯片建立客户端并且连接电脑建立的服务器,系统采用FreeRtos,通过给CH395Q配置IP,子网掩码,网关,端口号以及目标IP,目标端口号并且使能socket进行连接。

初始化步骤
CH395支持三种通讯模式,SPI、串口以及并口,具体要用哪种模式需要通过外部引脚进行配置,指令都是一样的,区别只是通讯方式不同,串口再多两个同步码而已,这个参考CH395的手册就可以。
CH395采用类似应答的模式进行通讯,在串口通讯中需要先设置串口的波特率,CH395提供了三个外部引脚对波特率进行设置,并且支持动态波特率设置,这点需要清楚,串口通讯模式下,在发送指令之前需要发送两个字节的同步码,为0x57,0xAB,必须先发送这两个同步码后再发送CMD指令



当在硬件上配置好了CH395之后,第一步先测试单片机与CH395芯片连接状态,需要通过串口发送0x57,0xAB,0x06,0xXX,XX表示任意的16进制数据,当发送了06指令后,CH395就会将XX数据按位取反之后发送给单片机,单片机检测回传回来的数据就可以检测到单片机与CH395是否连接正常,若正常,则进行下一步操作,若不正常,首先检查波特率是否一致,引脚是否配置为串口模式,检查单片机串口配置是否正常等。



重点来了,请注意!!!
CH395手册上说的很清楚,所有的数据发送都是以小端在前的格式进行发送,注意注意是小端,若端口号为8080,那么实际对应的16进制应该是0x1F90,所以在发送的时候要发送0x90,0x1F,切记不能发反,否则CH395会提示指令发送成功但是实际数据是不对的!更要注意的是发送IP地址的发送,IP地址假如是192.168.1.64,此时,手册也说的很清楚,先发送192再发送168然后是1然后是64,请务必认真一字一句读下面这张图
请务必认真一字一句读下面这张图!!!



若检测到单片机和CH395连接正常之后,先不要着急初始化,首先要配置CH395的IP地址,子网掩码和网关地址,配置完成之后再进行初始化。



设置本机地址ip与子网掩码,网关地址的方式就是定义成数组,然后通过指针++的方式进行发送,但是要记得每次发送指令前都要加同步码,在发送指令之后要等待CH395返回数据,0x00表示操作成功,也有对应的故障码,可看下图



在发送完数据之后要等待CH395的响应方可进行下一步操作,这也是CH395我觉得最不好的地方,效率太低。完成上述所有步骤之后C395即可建立客户端并尝试连接服务器,我们在电脑上利用网络调试助手建立服务器就可看到CH395连接成功,下面就是数据的收发过程。
建立连接之后就可以进行数据发送,但是要切记,发送完数据之后一定要再发送查询命令之后才能再次发送!也就是0x30这个指令,当发送了一帧数据之后INT中断引脚就会自动有下降沿的中断,此时检测到中断后发送查询命令0x30进行查询,这个查询返回码有一张表,对应这张表就可得出ch395当前状态,这张表的值都是或的关系,即在同一时间可以存在很多种状态,所以我们需要与的方式查看对应的状态,当时我发送一帧数据之后死活再也发不出去,最后排查才发现需要发送这个查询码才可以



当发送一帧数据之后INT中断引脚就会产生下降沿,触发单片机外部中断,此时就要查询状态来做出判断,比如说发送了一帧数据之后INT产生中断,发送查询指令后返回值为0x03,那么就对应图上的发送缓冲区空闲和发送成功状态,当发送一帧数据之后必须查询发送缓冲区非空才能继续发送,否则TCP连接就会断开,当TCP连接断开时,就要重新打开socket和重新连接,所以操作时尽量谨慎。发送的最大字节数也有限制,这个需要仔细查看手册。CH395支持8个socket,但是默认是给前四个socket分配了发送缓冲器和接收缓冲区,若要用后四个,则需要通过指令配置缓冲区,这个如果用到就查看手册,照猫画虎即可。



如果要建立UDP或者TCP的服务器,按照手册最后的流程一步一步就行,在最后如果谁需要驱动程序直接在南京沁恒微的官网上搜索CH395就能下载到技术手册以及例程,在例程种有readme,里面是对所有例程的介绍,在最后一个文档中有ch395的c和h文件,直接调用即可。





用这个CH395之后的感受就是,这个芯片的优点是集成了TCP/IP协议栈,并且集成了mac和phy,对于新手或者不是很懂计算机网络的程序员比较友好,属于把难的问题麻烦化,缺点是发热比较猛,而且如果能用spi或者并口的尽量使用spi或者并口,因为速度会快很多,这个芯片需要中断和应答,所以通讯起来效率比较低,发送数据还要查询,而且要写一个高内聚低耦合的驱动程序也需要费点心思,有种类似AT指令操作的味道
————————————————

                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/weixin_43405473/article/details/134440522

使用特权

评论回复
沙发
caigang13| | 2024-7-4 07:53 | 只看该作者
如果通信速率不高,使用串口最方便。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2028

主题

15903

帖子

13

粉丝