Как узнать длину данных, полученных при чтении SPI? [дубликат]Linux

Ответить
Anonymous
 Как узнать длину данных, полученных при чтении SPI? [дубликат]

Сообщение Anonymous »


Я столкнулся со странной проблемой при чтении и записи SPI через уровень приложения. Я обнаружил, что могу установить только длину отправляемых данных и не могу получить длину получаемых данных. Однако длина данных, которые я получаю каждый раз, не фиксирована. Как я могу изменить свой код?

spidev.c
#include #include #include #include #include #include #include #include #include #define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0])) перечисление { SPI_MODE = 0, SPI_DELAY = 0, SPI_SPEED = 500*1000, SPI_BITS = 8 }; int TransferSpi(int fd, const uint8_t *tx, int txSize, uint8_t *rx) { интервал врет; struct spi_ioc_transfer tr = { .tx_buf = (длинный без знака)tx, .rx_buf = (длинный без знака)rx, .len = txSize, .delay_usecs = SPI_DELAY, .speed_hz = SPI_SPEED, .bits_per_word = SPI_BITS, }; ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr); если (рет < 1) { perror("невозможно отправить сообщение spi"); вернуть -1; } вернуть возврат; } int OpenSpiDev(const char *devName) { режим uint8_t = SPI_MODE; uint8_t биты = SPI_BITS; uint32_t скорость = SPI_SPEED; uint16_t задержка = SPI_DELAY; интервал ФД = -1; интервал Рет = -1; fd = open (имя_разработчика, O_RDWR); если (фд < 0) { perror("невозможно открыть устройство"); вернуть -1; } /* * режим спи */ ret = ioctl(fd, SPI_IOC_WR_MODE, &mode); если (рет == -1) { perror("невозможно установить режим spi"); вернуть -1; } ret = ioctl(fd, SPI_IOC_RD_MODE, &mode); если (рет == -1) { perror("не могу войти в режим spi"); вернуть -1; } /* * бит на слово */ ret = ioctl(fd, SPI_IOC_WR_BITS_PER_WORD, &bits); если (рет == -1) { perror("невозможно установить количество битов в слове"); вернуть -1; } ret = ioctl(fd, SPI_IOC_RD_BITS_PER_WORD, &bits); если (рет == -1) { perror("невозможно получить биты в слове"); вернуть -1; } /* * максимальная скорость, Гц */ ret = ioctl(fd, SPI_IOC_WR_MAX_SPEED_HZ, &speed); если (рет == -1) { perror("невозможно установить максимальную скорость, Гц"); вернуть -1; } ret = ioctl(fd, SPI_IOC_RD_MAX_SPEED_HZ, &speed); если (рет == -1) { perror("невозможно получить максимальную скорость, Гц"); вернуть -1; } вернуть ФД; } int main(int argc, char *argv[]) { int fd = OpenSpiDev("/dev/spidev1.0"); uint8_t tx[] = { 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d}; uint8_t rx[ARRAY_SIZE(tx)] = { 0, }; передача (fd, tx, ARRAY_SIZE (tx), rx); for (int i = 0; i
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»