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

  • bluebanboom
  • LV4工程师
  • |      2018-07-28 13:37:43
  • 浏览量 1922
  • 回复:0
这一篇本来应该是在上星期完成的,但是中间出了点问题。本以为在玩了这多SPI后,应该一帆风顺的,然而就在我尝试在NanoPi K1 Plus下驱动最自信的Nokia5110时,遇到了一点问题。 在上两篇里已经对Linux下的spi比较熟悉了,所以作为结束的第三篇想要驱动Nokia5110,但是并没有成功。我还以为是屏幕坏了,所以又在淘宝上买了两片,结果还是不行。无奈之下又在Arduino下测试屏幕,发现这几个Nokia5110都没有问题,那么肯定就是SPI驱动的问题了。 这个时候,没有逻辑分析仪基本是无解了,庆幸的是我之前在淘宝买了个20多块的USB逻辑分析仪,想不到这次居然用它解决了问题。 问题到底在哪呢?其实我也没有最终找到,只是通过逻辑分析仪发现,使用wiringPiSPIDataRW的时候,时钟会出现异常,很奇怪。 来看一下逻辑分析仪中的数据 这几个数据就是出生后Nokia5110的数据,代码如下: 可以看到前5组数据都没问题,在下入0x0c的时候出现了问题,可以看到时钟突然有很长一个时间为高电平了,这是不科学的。空闲的时候时钟应该是低电平,不应该有那么长时间的高电平,注意红框中的时钟,这才是正确的波形。 但是我在试了几次的时候,发现有那么一两次数据是对的,屏幕上能隐约看到字符,所以我怀疑是驱动的问题。那就没办法用系统的驱动了,而且也实在不知道问题出在哪里,之前Max7219的时候还是好好的,但是这里却出了问题。一时半会没有好办法,只好通过GPIO去模拟SPI了。突然觉得有点讽刺,绕了半天居然又回到使用GPIO来模拟。之前的代码封装的比较好,只要重写writeNokia5110Byte即可,代码如下: 代码也很简单。使用GPIO模拟的好处就是引脚可以比较集中了。RST->25,CE->24,DC->23,Din->22,Clk->21,比使用SPI要集中的多了。 使用GPIO模拟后,屏幕一下子就显示出字符来了。虽然成功了,我还是用逻辑分析仪抓了一数据,如下所示: 可以看到数据这次都对了。但是波形跟之前的波形有点差异,因为代码里直接简单粗暴的将clk设置高低电平,没有延时。虽然粗暴,但是确很管用。 然后我又调整了一下代码,让波形看起来好看一些,但是相对于使用硬件SPI产生的波形来说,还是差一些。 关于Nokia5110的详细说明参考我之前的帖子《【Raspberry Pi 3 开发板 试用体验】AndroidThings Nokia5110》,这里需要说明CE引脚,之前的帖子里没有说明CE引脚,正常来说,CE为低电平的时候,向Nokia5110传递的数据才有效,直接将CE引脚悬空是一个比较偷懒的办法。上一张驱动的效果图: 代码见附件。
  • 0
  • 收藏
  • 举报
  • 分享
我来回复

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

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