40pin IO开发
实验07——SPI 实验
RDK X5 在 40PIN 上物理管脚 19, 21, 23, 24, 26引出了芯片的 SPI1 总线,支持两个片选,IO电压3.3V。
回环测试: 把 MISO 和 MOSI 在硬件上进行连接,然后运行 SPI 测试程序,进行写和读操作,预期结果是读出的数据要完全等于写入的数据
硬件连接
把 MISO (IO19)和 MOSI(IO21) 通过跳线帽直接硬件上连接在一起:

软件运行
进入用户主目录,运行
cd usersudo python3 ./test_spi.py
从打印的spi控制器中选择总线号和片选号作为输入选项,例如选择测试 spidev0.0,则bus num 和 cs num都是0,按回车键确认:
终端如图所示:

程序正确运行起来后会持续打印 0x55 0xAA,如果打印的是 0x00 0x00,那么就说明spi的回环测试失败。
终端如图所示:
#!/usr/bin/env python3
import sys
import signal
import os
import time
# 导入spidev模块
import spidev
def signal_handler(signal, frame):
sys.exit(0)
def BytesToHex(Bytes):
return ''.join(["0x%02X " % x for x in Bytes]).strip()
def spidevTest():
# 设置spi的bus号(0, 1, 2)和片选(0, 1)
spi_bus = input("Please input SPI bus num:")
spi_device = input("Please input SPI cs num:")
# 创建spidev类的对象以访问基于spidev的Python函数。
spi=spidev.SpiDev()
# 打开spi总线句柄
spi.open(int(spi_bus), int(spi_device))
# 设置 spi 频率为 12MHz
spi.max_speed_hz = 12000000
print("Starting demo now! Press CTRL+C to exit")
# 发送 [0x55, 0xAA], 接收的数据应该也是 [0x55, 0xAA]
try:
while True:
resp = spi.xfer2([0x55, 0xAA])
print(BytesToHex(resp))
time.sleep(1)
except KeyboardInterrupt:
spi.close()
if __name__ == '__main__':
signal.signal(signal.SIGINT, signal_handler)
print("List of enabled spi controllers:")
os.system('ls /dev/spidev*')
spidevTest()