作为TI Sitara™产品线新一代MPU产品,TI AM62x处理器特殊配备了多达4路的SPI接口以及1路OSPI接口(有时也称为QSPI),丰富的SPI接口配置使得该处理器能够同时与多个设备进行通信连接,大大提高了系统的扩展性和灵巧性。
在飞凌嵌入式推出的搭载了AM62x处理器的OK6254-C开拓板上,NOR Flash存储器正是通过连接到处理器的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 ->
Usermode SPI device driver support
(注:在飞凌嵌入式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. 编译烧录:
在源码路径下输入以下命令:
. build.shsudo ./build.sh kernel
没有报错即为编译成功。
将源码路径下的image中的OK6254-C.dtb文件放到开拓板的/boot目录中,重启开拓板即可。
4. SPI测试:
将spi0_D0和spi0_D1短接
重启开拓板后,在/dev目录下看到多出两个spidev设备。
利用我们的测试程序
fltest_spidev_test -D /dev/spidev3.0 -s 42000
有如下打印信息即为成功:
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
四、总结
TI AM62x处理器有着丰富的SPI资源,而SPI又可以作为许多设备的总线,这使得AM62x能够接入许多SPI接口的设备,因此在那些对SPI有着比较多需求的运用处景下,TI AM62x无疑是一个非常好的主控选择。