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

目前,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 从机功能实现。实际测试,系统稳定可靠。








评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值