跟着小狂玩RicoBoard之UART
串口篇应该是RicoBoard驱动的最后一篇了,这篇文章要写的东西其实很早之前就完成了,也一直说要写,但是后来想想还是放到了最后,因为在坛子的试用贴中已经有好几个人都降到了UART3和UART5的启用与测试,小狂自认为文章写不来神马新颖的东西,就一直拖到了最后,但是UART是一个系统中比较重要的功能,如果不写的话可能会却胳膊少腿的,就硬着头皮写下去,这一次小狂没有真正的写驱动程序,而是使用现成的驱动模型。通过更改设备树的方式让其支持我们的UART3和UART5,这篇文章,小狂尽量把坛子里关于这部分内容欠缺的都补上。同时谢谢大家的支持,这篇文章过后就真正的要进入项目结项的进程啦。
这个图是UART实际调用的图,我们会发现不一样的是多了一个TTY层,其实这个就是TTY子系统驱动层,然后调用串口的低级驱动层,主要实现UART的设置,主要与硬件层交互,这种写反完美的实现了设备与驱动分层的思想,我们只需要修改相应的设备树配置就能完成所有的UART配置。
一、设备树修改
具体的设备树如何使用,语法如何,在这里小狂就不再赘述了,这也不是一篇帖子能写清楚的,给大家选两个参考资料,一个是宋宝华大师的linux设备驱动开发详解中的设备树环节,讲的十分清楚,第二个是内核中关于设备树的描述具体目录在xxxx\linux-3.12.10-ti2013.12.01\Documentation\devicetree。花不了多长时间看一下,就能理解个大概
1、 硬件电路连接
我们要再找一个u转串的板子把其连接到电脑上以供测试。
2、 设备树中增加串口操作
RicoBoard的设备树总共分为两个,一个是总的设备树文件,定义所有的接口,名字是am4372.dtsi,另外一个是板级设备树文件,主要定义板子有的设备的硬件定义,名字为myir_ricoboard.dts。
我们首先修改修改am4372.dtsi,让其支持UART3和UART5,
Aliases,这个节点怎么说的,小狂感觉不用也行,其就是一个信息节点,没有什么实质性的意义,一般用来定义别名。
引用的就是这个东东,可以看到这里边定义了兼容的芯片,寄存器的地址以及大小,以及使用的中断方式,时钟。
其次我们需要修改板级的设备树文件,主要是引脚配置之类的。
这个地方坛子里的小伙伴们有做的,这个地方不大对,小狂就改过来啦,具体为神马听我到来。这里的引脚配置是用了引脚复用的。用的是芯片内部的control module来配置一引脚复用
首先我们用的引脚是H24和H25
我们要弄明白这两个引脚的名字叫神马。
然后我们找到相应的复用寄存器
我们可以看到地址偏移为A28和A2C,我们需要主地址。
到这里基本上所有的东西都已经通了,但是我们会发现偏移地址不一样一个是228和22c而我们的偏移地址是A28和A2C,别着急,我们还有东西没有说明。
在主设备树文件中定义的基础地址是0x44e10800,这样就清晰了,0x44e10800+228=0x44e10000+a28。
不知道讲了那么多啰嗦的东西大家能不能整明白这个逻辑关系。
这个整完了,我们需要真正的定义设备树中的UART节点了。
这些就是写的设备树节点。串口使能,使用默认的配置,然后引脚复用引用我们刚才的配置。就这样。写到这里我们的设备树修改完成,下边,编译一下,直接make 就行,在刚开始的时候已经配置完成了。
然后生成新的dtb文件
3、 替换板子上的设备树文件
修改完成后,我们要更改一下板子上的设备树文件,首先我们需要把我们重新编译的设备树文件下载到开发板中,老规矩使用SCP指令
然后我们需要把我们的dtb文件拷贝到emmc中以备更新的时候使用
然后重启我们的开发板,就ok啦
看看我们的配置是否成功
我们看到这个时候,我们的设备已经存在一定要看清楚,那个是ttyO0,大写的O不是0,不然会提示没有设备的,哈哈,这个时候我们就可以使用cat读数据,或者使用echo往里写数据了,当然也可以写个测试小程序,这里小狂就不影响大家发挥了,今天就到这吧,因为考试所以只能半夜写帖子啦,多谢各位的支持,下一贴ubuntu的移植,只要有时间就慢慢写,希望不会让大家等的很久。再次谢谢支持小狂的各位。