SPI是一种高速的、全双工、同步的通信总线,并且在芯片的管脚上只占用四根线,节约了芯片的管脚,同时为PCB的布局节省空间,提供方便,正是出于这种简单易用的特性,现在越来越多的芯片集成了这种通信协议。
TI AM62x处理器拥有4路SPI以及1路QSPI,丰富的SPI接口可以同时接多个设备,飞凌OK6254-C开发板的NOR Flash就接在了OSPI(QSPI)总线上。
在介绍AM62x的SPI之前,我们先来了解一下SPI是如何工作的。通常SPI通过4个引脚与外部器件相连:
MISO:
主设备输入/从设备输出引脚。该引脚在从模式下发送数据,在主模式下接收数据;
MOSI:
主设备输出/从设备输入引脚。该引脚在主模式下发送数据,在从模式下接收数据;
CLK:
串口时钟,作为主设备的输出,从设备的输入;
NSS:
从设备选择。这是一个可选的引脚,用来选择从设备。
SPI的工作流程是这样的——
主机先将NSS信号拉低,这样保证开始接收数据;
当接收端检测到时钟的边沿信号时,它将立即读取数据线上的信号,这样就得到了一位数据(1bit);
由于时钟是随数据一起发送的,因此指定数据的传输速度并不重要,尽管设备将具有可以运行的最高速度;
主机发送到从机时:主机产生相应的时钟信号,然后数据一位一位地将从MOSI信号线上进行发送到从机;
主机接收从机数据:如果从机需要将数据发送回主机,则主机将继续生成预定数量的时钟信号,并且从机会将数据通过MISO信号线发送。
SPI工作时序图如下:
2. AM62x中SPI总线的特点在AM62x这款芯片中,TI将SPI的MISO与MOSI设计为d0和d1,哪一个作为输入,哪一个作为输出,是由设备树中的ti,pindir-d0-out-d1-in= <1>来设置的。
默认这个属性值为0,即d0是输入,d1是输出。当为1时,d0为输出,d1为输入。
3. AM62x的SPI应用1. menuconfig配置
将这个该项选中,SPI驱动将编译进内核中。
makemenuconfi
DeviceDrivers ->
SPIsupport ->
Usermode SPI device driver support
注:在飞凌OK6254-C开发板中,已经将SPI驱动编译进去。
2. 设备树配置
1. 选择需要使用的spi,这里我们用spi0,节点为&main_spi0;
2. 将该节点所用的引脚复用为相应的功能。
3. 描述节点的属性,具体配置项的功能见注释。
3. 编译烧录
在源码路径下输入以下命令:
没有报错即为编译成功。
将源码路径下的image中的OK6254-C.dtb放到开发板的/boot目录中,重启开发板。
4. SPI测试
将spi0_D0和spi0_D1短接
重启开发板后,在/dev目录下看到多出两个spidev设备。
使用我们的测试程序
有如下打印信息即为成功:
4. 总结spimode: 0
bitsper word: 8
maxspeed: 42000 Hz (42 KHz)
FFFF FF FF FF FF
4000 00 00 00 95
FFFF FF FF FF FF
FFFF FF FF FF FF
FFFF FF FF FF FF
DEAD BE EF BA AD
F00D
AM62x上有着丰富的SPI资源,而SPI又可以作为许多设备的总线,这使得AM62x能够接入许多SPI接口的设备。因此在那些对SPI有着比较多需求的应用场景下,基于TI AM62x设计开发的OK6254-C开发板无疑是一个非常好的选择。
文章评论(0条评论)
登录后参与讨论