【NanoPi K1 Plus试用体验】SPI驱动探索(中)

  • bluebanboom
  • LV4工程师
  • |      2018-07-15 13:42:00
  • 浏览量 1321
  • 回复:0
在上一篇试用里直接用WringNP来驱动Max7219,之前还提到了操作“/dev/spidev0.x”来使用SPI,这一篇里我们丢掉WringNP,纯文件操作来驱动Max7219点阵。 因为要驱动Max7219不光要用SPI,还需要使用GPIO操作CS,幸好GPIO也是可以通过读写文件来操作。以之前使用的7号gpio为例,这个在Linux下对应于203,关于引脚的对应关系可以通过gpio readall来查看。如果希望通过文件来操作203,首先通过如下命令导出,
sudo sh -c 'echo 203 > /sys/class/gpio/export’
接着将其设为out
sudo sh -c 'echo "out" > /sys/class/gpio/gpio203/direction’
然后就可以通过如下命令操作了
sudo sh -c 'echo 1 > /sys/class/gpio/gpio203/value'

sudo sh -c 'echo 0 > /sys/class/gpio/gpio203/value’
是不是也很简单,我们先来封装一下gpio操作,首先是初始化gpio,也就是导出203,然后设为out。 接下来就是操作gpio函数,因为在initGPIO已经打开了文件句柄,所以读写GPIO函数就很简单了 接下来就是改用文件操作来驱动SPI。在上一篇的代码里只需要修改两处,第一处就是初始化SPI函数,第二处就是writeMax7219核心函数。 在initSPI里直接使用open打开spi设备,然后使用ioctl来设置速率、模式等,也就是替换了wiringPiSPISetupMode函数。这里还多了一个bpw,就是设置spi设备每次传输8位数就。 而在writeMax7219函数中,直接用write函数向spi设备写入数据,这里把地址和值一次写入了,然后用csWrite替换了digitalWrite,这样整个代码就不需要使用WiringNP库了,没有了依赖。 其实,WiringNP就是采用文件读写实现spi驱动的,只不过,它直接用ioctl来写入、读取数据可以实现全双工模式,而Max7219是不需要读取数据,所以直接用write函数也没什么问题。 附件是完整代码。
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

登录后可评论,请 登录注册

所有回答 数量:0
x
收藏成功!点击 我的收藏 查看收藏的全部帖子