0

我正在查看使用 spi_transfer 结构在 SPI 线上写入一些数据的代码

struct spi_transfer  
 {
 const void * tx_buf;
 void * rx_buf;
 unsigned len;
 dma_addr_t tx_dma;
 dma_addr_t rx_dma;
 unsigned cs_change:1;
 u8 bits_per_word;
 u16 delay_usecs;
 u32 speed_hz;
 struct list_head transfer_list;
};

现在像这样的一些是在代码中完成的

u8 *cmd
cmd=kmalloc(3,GFP_KERNEL);
cmd[0]=16;
cmd[1]=32;

现在 t[0].tx_buf = cmd;

现在我想知道这个缓冲区中写入了什么以及 tx_buf 在这里期望什么?我们正在通过 SPI 线写入一些看门狗计数器。

4

1 回答 1

1

看起来您正在向 SPI 设备发送字节 0x10、0x20、0x00。应该有其他代码已经定义并初始化了 struct spi_transfer t[] 的其余部分。值得注意的是,t[0].len 必须设置为 3。

也许您的代码库用于内核模块/设备驱动程序。函数 spi_message_add_tail() 等在内核源代码 include/linux/spi/spi.h 中。它们不是动态模块,但是当您的模块加载时,您的模块将与内核链接。

检查内核源代码以获取 SPI 基础设施使用示例,例如 drivers/base/regmap/regmap-spi.c。

于 2013-08-28T22:22:04.143 回答