SPI_IOC_MESSAGE (N) на Raspberry Pi 3 - PullRequest
       53

SPI_IOC_MESSAGE (N) на Raspberry Pi 3

0 голосов
/ 28 февраля 2019

Я работаю над проектом на Raspberry Pi 3, и я увидел эту строку кода:

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

Я не знаю, что делает SPI_IOC_MESSAGE(1), и я попытался найти в Интернетеего объяснение, но я не смог его найти.Есть ли кто-нибудь, кто мог бы объяснить, что он делает?

1 Ответ

0 голосов
/ 28 февраля 2019

См. Объявление ioctl здесь: ссылка Вы видите, что передаете тип запроса во втором аргументе, чтобы сообщить драйверу, что вы хотите.Ваш второй аргумент - SPI_IOC_MESSAGE, который является макросом, определенным в коде Linux здесь ссылка .Он создает номер типа запроса, который включает в себя количество сообщений, которые вы хотите отправить, и затем он передается драйверу, а затем драйвер декодирует тип запроса и количество сообщений из этого и обрабатывает третий аргумент как сообщения, которые нужно отправить, инаконец отправляет сообщения.

Из ядра 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.
...