linux - 树莓派 3 上的 SPI_IOC_MESSAGE(N)

标签 linux raspberry-pi3 embedded-linux spi ioctl

我正在 Raspberry Pi 3 上做一个项目,我看到了这个代码行:

ioctl(sSpiObj.spiFd, SPI_IOC_MESSAGE(1), &sSpiTransfer);        

我不知道SPI_IOC_MESSAGE(1)是做什么的,我试图在网上找到它的解释,但我找不到。有没有人可以解释它的作用?

最佳答案

从这里查看 ioctl 声明:link 你看到你必须在第二个参数中传递请求类型来告诉驱动程序你想要什么。您的第二个参数是 SPI_IOC_MESSAGE,它是在此处的 Linux 代码中定义的宏 link .它创建一个请求类型编号,其中包含您要发送的消息数量,然后将其传递给驱动程序,然后驱动程序解码请求类型和来自此的消息数量,并将第三个参数处理为要发送的消息,最后发送消息。

来自linux内核文档:

 * SPI_IOC_MESSAGE gives userspace the equivalent of kernel spi_sync().
 * Pass it an array of related transfers, they'll execute together.
 * Each transfer may be half duplex (either direction) or full duplex.
 *
 *  struct spi_ioc_transfer mesg[4];
 *  ...
 *  status = ioctl(fd, SPI_IOC_MESSAGE(4), mesg);
 *
 * So for example one transfer might send a nine bit command (right aligned
 * in a 16-bit word), the next could read a block of 8-bit data before
 * terminating that command by temporarily deselecting the chip; the next
 * could send a different nine bit command (re-selecting the chip), and the
 * last transfer might write some register values.

关于linux - 树莓派 3 上的 SPI_IOC_MESSAGE(N),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54923582/

相关文章:

linux - USB : gadget : device mode : configfs: uvc and mass storage on single configuration?

java - 我选择 UDP 作为我的 peer 2 peer 服务,我如何证明它在我的情况下是可靠的

sql-server - 无法在 Linux SQL Server docker 镜像中绑定(bind)挂载 Windows 文件夹

python - 需要帮助将小型 python 脚本从 Windows 转换为 Linux

python - 在Python中读取2字节的I2C事务

linux - 交叉编译nginx-1.0.11

linux - 按搜索顺序显示目录的 bash 脚本

linux - "not running as user lfs, you should be"错误

linux - 如果出现错误或执行中断,请在树莓派上重启 python 脚本

linux - Telnet 到嵌入式 linux 板 : command not found