wk2168驱动调试(一)

来源:互联网 发布:龙诚健康大数据 编辑:程序博客网 时间:2024/05/29 15:32
拿到wk2168的开发板了,前面硬件人员整烧了一块。这样的板子比较好调,硬件相对来说是验证过的,只要把软件驱动移到我们的系统下就可以。
介绍一下wk2168芯片的功能,这是一块成都本地公司开发的扩串口的芯片,WK2168是首款具备256级FIFO的低功耗并支持 UART/SPITM/IIC/8位并行总线接口的
4通道UART器件。可以通过模式选择使得该芯片工作于以上任何一种主接口模式,将选定的主接口扩展为4个增强功能的UART。 我们板子上要的串口比较多
其实别的接口也多,基本都占完了。准备用串口扩串口的方式来增加串口。主CPU上有4个串口,再用一扩四的芯片,达到除调试口外达到16个串口,这样主板上就
有足够的接口供外设接入。




其实原理是通过板载口接到wk2168的主串口上,在2168上转成4路子串口,板载口和主口通信采用高的传送速率,子串口速率通常工作在9600的波特每率下。数据收发中断采用的是板上的中断线,这样4个串口的
数据收发中断,都通过一个中断号上传。还有reset信号,看文档要求用gpio来完成reset。
硬件原理比较清楚,硬件联线也可以确定,两块板用杜邦线来联接的,速率不高的情况下,这种飞线方式基本可以保证信号完整。以前调phy与mii通信就遇到过信号质量问题。所以,专门提出来说。


驱动程序上,厂家提供了别的主板的驱动程序,拿过来改成我们cpu的体系。
基本框架是板载口的各功能寄存器定义完成应射,完成波特率设定,和最基本的数据收和发的基础函数。中断线与中断服务程序挂接。这个主口不用初始化,手册上说发0x55就会自己检测波特率
子口初始化不需要做什么修改,厂家的驱动就够用了。


硬件软件都准备好后,进入调试过程。


1.把数据线接到usb转ttl上,通过板子向pc发送数据,验证板载串口的波率设置和数据收发操作是否正确。这一步把以前vk3234的操作拿过来就可以了。实际上一把就通了。吐槽下厂家代码,小公司写的代码全是
数字,连个宏都不定义,根本看不懂他们的板载口初始化,也没有注解没说明,一个函数干了几个功能。
2.板载口通了,子口初始化不用改,这个部分在串口驱动上是纯软件的操作,因为没有打开,不会实际操作硬件,就这样子口初始化也过了。
3.主口与板载口协商。驱动源码是最后阶段才发0x55去协商,但每次都挂在这个地方了,发完55就会有个读寄存器,一直等在这个函数上了,说明没有读到数据。这个基本的读操作是板载口的操作,我自己提供的。
所以这个问题应当是发0x55后,主口没有检测到正确的波特率。问FAE,他们的回答是reset不成功,才会有这个问题,文档上推荐gpio来做reset,我们用手动来reset。没办法,只有找一根gpio来reset一下。
在主板上找到一个gpio口线,飞到wk2168上,程序上增加了reset的操作。重新初始化,驱动程序不再挂在读寄存器上了。这样驱动基本上挂上去了。
4.编写串口读写程序,直接cat /dev/ttysWK2的方式测试,硬件上用usb转232接到wk2168的子口上,通过串口工具收发数据,看到发送字符和接收字符是一样的,基本说明驱动调试基本功能正常通过。


深入验证:
由于我们的串口拿来收发数据,不完全是字符,就要进行全面的测试。各种各样的数据,主要的波特率,硬流控等,还有rs485功能。
目前发现3个问题:
1.发送32个或以上字符时,一次就卡死,低于32个,发送没有问题。
2.发送低于f的数字就会变化,0x0a发送还要挂死。
3.发送11时,还会丢数据,第一个数据要丢。


这几个问题好基础,看样子跟驱动关系不大,跟芯片内部处理上有问题。和FAE协商定位这些问题,如果解决不了,估计这块芯片都用不成。如果解决了,后面再写出来,其实芯片也是人写的程序,肯定也存在bug。
但是否能解决。以前用过他们家的vk3234,没有上面的问题。
原创粉丝点击