最近工作需要使用到一个加密芯片。与3568使用SPI进行通信,后期会使用厂家的应用服务程序。因此,只是做数据收发验证一下硬件连接问题。
最初的时候,由于没有拿到厂家给的驱动程序。因此,决定使用平台自带的SPI驱动,基于spidev.c文件。
硬件原理图上连接的是SPI0_M0,片选0。
设备树内容如下:
通过指定红框中数字,可以影响到/dev/spidev0.x 设备文件的名字,其中x的值会与红框中的数字一致。
通过访问在/dev/spdev0.0设备文件节点,发送固定数据到加密芯片,会收到芯片返回的数据。
后来,收到厂家的驱动后,移植此驱动程序。发现数据不返回。
于是准备使用逻辑分析仪来抓取波形。由于是第一次使用,在这里就把逻辑分析仪的使用方式具体化一些。
首先,在原子官网下载逻辑分析仪应用软件。里面也有一个使用手册教程。
硬件接法和与示波器相接类似。需要接到对应芯片引脚上。然后配置软件此处选择了0~4 五个通道。
可以在此处选择SPI协议,点击编辑,可以将对应的通道编辑为SPI的线序
编辑好以后选择确定,同时,对应的硬件线序也要接到对应的通道上。
左侧,选择开始触发采集的方式,如下图。为通道0(此处配置为SPI的片选),电平发生变化,开始触发信号采集。
然后点击右测上面的开始采集按钮即可。然后,在板卡上运行和加密芯片SPI通信的程序。得到了如图所示的:
根据上图,可以看到,数据是我所发送的数据。但是数据是多次传输的(片选信号被多次下拉),而非一次传输。而后面并没有在MISO总线上看到回复的数据。
经分析,对方驱动程序在发送数据是,会将片选拉低。
spi_write函数会调用到SPI控制器驱动注册的发送数据函数,而在SPI控制器驱动中,也配置了片选信号,即发送数据时,SPI控制器,也会再次将片选信号拉低,再拉高。就导致了上述现象发生。
最后,经过测试发现将设备树中,SPI控制配置部分关于片选的信息去掉,即会默认使用软件来控制片选信号。最后设备树如下图所示:
再次使用逻辑分析仪抓取数据,结果如下图所示:
可以看到,片选信号只发生了一次变化。数据也被正确的返回发送。
这次调试的结论就是,SPI通信,当通过设备驱动软件来控制片选,即在设备树中指定了片选信号时,需要将控制器驱动中关于片选的信息去掉。