SPI(SerialPeripheralInterface)通信总线以其高速、全双工、同步的特性而被广泛应用,它只需要四根线就能实现数据传输,有效地节约了芯片管脚的数量,同时为PCB布局带来了空间上的优化和便捷。正因为它简单易用的特点,现在越来越多的芯片选择集成SPI通信协议。
作为TISitara™产品线新一代MPU产品,TIAM62x处理器特别配备了多达4路的SPI接口以及1路OSPI接口(有时也称为QSPI),丰富的SPI接口配置使得该处理器能够同时与多个设备进行通信连接,大大提高了系统的扩展性和灵活性。
在飞凌嵌入式推出的搭载了AM62x处理器的OK6254-C开发板上,NORFlash存储器正是通过连接到处理器的OSPI总线上进行工作的。这样的设计充分利用了SPI通信协议的高速传输和全双工特性,保证了开发板在数据处理和存储方面的效率。本文就通过OK6254-C开发板为大家介绍一下AM62x的SPI。
一、SPI的工作流程和时序我们首先需要了解一下SPI是如何工作的——通常SPI通过4个引脚与外部器件相连:
(1)MISO:主设备输入/从设备输出引脚
该引脚在从模式下发送数据,在主模式下接收数据;
(2)MOSI:主设备输出/从设备输入引脚
该引脚在主模式下发送数据,在从模式下接收数据;
(3)CLK:串口时钟
作为主设备的输出,从设备的输入;
(4)NSS:从设备选择
这是一个可选的引脚,用来选择从设备。
SPI的工作流程是这样的:
(1)主机先将NSS信号拉低,这样保证开始接收数据;
(2)当接收端检测到时钟的边沿信号时,将立即读取数据线上的信号,这样就得到了一位数据;
(3)由于时钟是随数据一起发送的,因此指定数据的传输速度并不重要,尽管设备将具有可以运行的最高速度;
(4)主机发送到从机时,主机产生相应的时钟信号,然后数据一位一位地将从MOSI信号线上进行发送到从机;
(5)主机接收从机数据时,如果从机需要将数据发送回主机,则主机将继续生成预定数量的时钟信号,并且从机会将数据通过MISO信号线发送。
SPI工作时序图如下:
二、AM62x处理器中SPI总线的特点在AM62x这款芯片中,TI将SPI的MISO与MOSI设计为d0和d1,具体哪一个作为输入,哪一个作为输出,是由设备树中的ti,pindir-d0-out-d1-in=1来设置的。
默认属性值为0,即d0是输入,d1是输出;
当属性值为1时,d0为输出,d1为输入。
三、AM62x的SPI应用1.menuconfig配置:
将该项选中,SPI驱动将编译进内核中。
makemenuconfi
DeviceDrivers-
SPIsupport-
UsermodeSPIdevicedriversupport
(注:在飞凌嵌入式OK6254-C开发板中,SPI驱动编译已进去。)
2.设备树配置:
(1)选择需要使用的spi,这里我们用spi0,节点为main_spi0;
(2)将该节点所用的引脚复用为相应的功能。
spi0_pins_default:spi0-pins-default{pinctrl-single,pins=AM62X_IOPAD(0x1B4,PIN_OUTPUT,0)/*(A13)SPI0_CS0*/AM62X_IOPAD(0x1B8,PIN_OUTPUT,0)/*(C13)SPI0_CS1*/AM62X_IOPAD(0x1C0,PIN_INPUT,0)/*(B13)SPI0_D0*/AM62X_IOPAD(0x1BC,PIN_OUTPUT,0)/*(A14)SPI0_CLK*/AM62X_IOPAD(0x1C4,PIN_INPUT,0)/*(B14)SPI0_D1*/;};(3)描述节点的属性,具体配置项的功能见注释。
main_spi0{status="okay";pinctrl-names="default";pinctrl-0=spi0_pins_default;/*描述引脚复用节点*/ti,spi-num-cs=2;/*描述片选的数量*/ti,pindir-d0-out-d1-in=1;/*描述输入输出分别是哪个*//*描述子节点spidev0设备*/spidev@0{spi-max-frequency=24000000;/*描述spidev0设备的最大频率*/reg=0;/*描述spidev0设备所用的片选,这里是第0个*/spi-cs-high;/*描述spidev0设备高有效*/compatible="rohm,dh2228fv";/*描述spidev0设备所用驱动*/};/*描述子节点spidev1设备*/spidev@1{spi-max-frequency=24000000;reg=1;compatible="rohm,dh2228fv";};};3.编译烧录:
在源码路径下输入以下命令:
./
没有报错即为编译成功。
将源码路径下的image中的文件放到开发板的/boot目录中,重启开发板即可。
4.SPI测试:
将spi0_D0和spi0_D1短接
重启开发板后,在/dev目录下看到多出两个spidev设备。
使用我们的测试程序
fltest_spidev_test-D/dev/
有如下打印信息即为成功:
spimode:0
bitsperword:8
maxspeed:42000Hz(42KHz)
FFFFFFFFFFFF
95
FFFFFFFFFFFF
FFFFFFFFFFFF
FFFFFFFFFFFF
DEADBEEFBAAD
F00D
四、总结TIAM62x处理器有着丰富的SPI资源,而SPI又可以作为许多设备的总线,这使得AM62x能够接入许多SPI接口的设备,因此在那些对SPI有着比较多需求的应用场景下,TIAM62x无疑是一个非常好的主控选择。