1. 前言
现有的硬件使用CS0和CS1在一个SPI上连接一个FRAM和一个TPM模块,在Jetson Nano上运行ok。
Xavier NX模块的问题是硬件控制芯片选择信号(CS0)的不同行为。
以下描述适用于FRAM, TPM是没有问题的,是两种配置。
SPI由“ioctl”函数控制,利用了“cs_change”选项。
FRAM需要操作码,24位地址和内存数据。
从操作码到数据流结束,CS必须保持低。
下面的代码在Nano上运行良好:
uint8_t tx[4] = { OPCODE_WRITE };
tx[1] = (uint8_t) (address >> 16) & 0xFF;
tx[2] = (uint8_t) (address >> 8) & 0xFF;
tx[3] = (uint8_t) (address & 0xFF);
struct spi_ioc_transfer tr = { .tx_buf = (unsigned long) tx, .rx_buf = 0,
.len = 4, .delay_usecs = delay, .speed_hz = 0, .bits_per_word = 0,
.cs_change = 0, };
struct spi_ioc_transfer tr2 = { .tx_buf = (unsigned long) send, .rx_buf = 0,
.len = len, .delay_usecs = delay, .speed_hz = 0, .bits_