您的位置:首页 > 运维架构 > Linux

基于全志A33 spi从机系统实现

2018-01-07 23:54 288 查看
目前,linux系统是不支持spi从机功能,有个项目,A33 与单片机采用spi高速通讯,考虑到速度,只能设置A33 spi为从机模式。

一:硬件修改

主spi的一个io,连接到从机的一个中断io口:主机选择从机通讯时,这个io为低,从机利用中断可以立即准备好数据

主spi立即发出spi clk信号,与从机通讯。

二:软件修改

分析:1:默认的spi驱动只支持主spi,不支持从spi,驱动的流程上肯定要修改。

2:必须考虑DMA和FIFO传输的不同,特别是DMA部分。查看驱动,由于是主spi的框架,在通讯中是要wait的,通讯后会释放DMA资源,这样是无法用在从机spi系统的。

这是一个关键问题:去掉释放DMA的动作,修改DMA传输,在DMA传输完后再释放DMA资源。

3:由于A33的spi设置为从机,那就必须考虑2个问题:无法预知主机什么时候发起spi通信,如何处理spi主机发起的通讯和android应用层发出的spi控制信息。

第一个问题,用工作队列可以解决,第二问题,用锁可以解决。

4: 全志A33 spi从机配置

看规格书,把init中的spi模式寄存器数值修改为从机。

工作流程:

必须用异步方式传输数据。在init spi时新建一个work,负责spi数据传输。

1:android上层准备好数据,立即下发到spi,驱动立即保存好数据(DMA或FIFO BUF),然后把全局变量gHasSpiData设为1,退出,返回上层成功标识。

2:利用中断,产生一次工作队列的调度,实现异步传输。

3:工作队列的内容:配置好DMA,等待spi主机访问数据。上锁,等传输结束释放资源,解锁。

通过以上修改,linux的spi 从机功能实现。实际测试,系统稳定可靠。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  A33 spi linux spi从机