Я пытаюсь установить spi-связь от RPi (Master) к EtherCAT Device (Slave).
Передача данных получила схему.
Мне нужно передать 2 байта, которые адресные регистры и следующие байты передают данные, пока выбор микросхемы не прервет связь.
Это моя созданная попытка. С помощью cs_change я могу указать своему spi-сообщению отменить выбор Chip Select до начала следующей передачи.
char transfer(UINT8 data, char last)
{
char last_transfer = last;
int ret;
uint8_t tx[] = { data };
uint8_t rx[ARRAY_SIZE(tx)] = { };
struct spi_ioc_transfer tr = {
.tx_buf = (unsigned long)tx,
.rx_buf = (unsigned long)rx,
.len = ARRAY_SIZE(tx),
.delay_usecs = delay,
.speed_hz = speed,
.bits_per_word = bits,
.cs_change = 0,
};
if (last_transfer)
tr.cs_change = 1;
ret = ioctl(fd, SPI_IOC_MESSAGE(1), &tr);
if (ret < 1)
printf("can't send spi message");
return rx[tr.len-1];
}
Первая проблема: я думаю, что уже слишком поздно снимать флажок Chip Select при новой передаче. Итак, мой первый вопрос: есть ли другой способ контролировать мой сигнал Chip Select, может быть, еще одна библиотека, которую я могу использовать ?!
Вторая проблема: я хочу читать из spi без записи, как я могу это понять (с помощью простого чтения (fd ...)?!)
Надеюсь, вы меня поддержите :)