SPI的一些总结

本文分享了作者在Linux下实现SPI设备驱动的经验,包括一个MP3解码芯片VS1003和一个VFD荧光屏的驱动开发过程。文中详细记录了在驱动开发过程中遇到的一些常见问题及解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

到目前为止做了两个linux的spi设备,一个是一个mp3解码芯片vs1003,另一个是一个VFD 荧光屏,其中vs1003使用的arm自带的spi控制器驱动,VFD屏使用的GPIO模拟SPI实现的。这两个驱动都没有使用内核中的spi子系统框架,而是单独做了一个字符设备,当初因为感觉内核中的spi子系统太庞大,对其也不算太熟,而且这两个驱动并不是很大,所以就单独实现了。对与SPI本身来说,其实很简单,就是四种模式,掌握好什么时候发数据,什么时候读取数据,按照时序操作,通讯问题应该不大。在这两个驱动中遇到了以下一些问题,都是相当初级的,现在想想真低级

1.一个是对spi控制器进行初始化的时候,寄存器是16位的,而我把代表寄存器的变量强制转换成了32位的,这样初始化肯定是错误的,spi一直工作不起来。对硬件地址的操作一定要注意这些。比如一个寄存器是8位的,地址是0x500000000,而这样操作:*(violate unsigned int *)0x500000000 = 0x10;这样操作肯定是错误的。

2.还有一个是在读取状态寄存器的时候,总是得到错误的状态,明明已经发送完了,可是读出的值却不对,这个是因为在声明的时候没有使用violate关键字。

3.在验证了程序初始化部分以及时序都正确的情况下,而通讯就是不正常,一定要敢于怀疑器件是否是好的,也许换一个器件就通了。

有时间还是有必要把内核中的spi子系统看一下


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值