Запись в шину I2C QEMU PetaLinux
Я пытаюсь записать на шину I2C, используя основные файлы Linux I2C. По сути, мой код основан на официальной документации ядра для интерфейса разработчика I2C.
https://www.mjmwired.net/kernel/Documentation/i2c/dev-interface (ранее был доступен на kernel.org)
Программа, кажется, не работает, когда я пытаюсь записать три байта.
uint8_t regaddr;
int fd;
int ret = 0;
uint16_t data[] = {1, 2, 4};
fd = open(I2C_ADAPTER, O_RDWR | O_NONBLOCK);
uint64_t funcs;
if (ioctl(fd, I2C_FUNCS, &funcs) < 0) {
printf("ioctl failed");
return -errno;
}
printf("funcs & I2C_FUNC_I2C: %d", funcs & I2C_FUNC_I2C);
printf("funcs & I2C_FUNC_SMBUS_WORD_DATA: %d\n", funcs & I2C_FUNC_SMBUS_WORD_DATA);
__s32 res;
if (funcs & I2C_FUNC_I2C) {
printf("Attempting to write to I2C bus via I2C protocol...\n");
char buf[10];
buf[0] = REG_ADDR;
buf[1] = 0x43;
buf[2] = 0x65;
int bytes_written = write(fd, buf, 3);
if(bytes_written != 3) {
printf("Wrote %d bytes", bytes_written);
printf("\tFailed to write to I2C Bus\n");
close(fd);
return -1;
}
else {
printf("\tSuccesful write to I2C Bus\n");
}
Я не думаю, что проблема связана с тем фактом, что это встроенная система, работающая на эмуляторе. В этом нет программируемой логики, поэтому интерфейс Xilinx AXI не должен вступать в игру.
Вывод PetaLinux, работающего на эмулированном ZC706, выглядит следующим образом:
root@plnx_arm:~# i2capp
funcs & I2C_FUNC_I2C: 1797funcs & I2C_FUNC_SMBUS_WORD_DATA: 0
Attempting to write to I2C bus via I2C protocol...
cdns-i2c e0004000.i2c: timeout waiting on completion
Wrote -1 bytes Failed to write to I2C Bus
Я сомневаюсь, что это проблема типа конфигурации оборудования, так как я могу открыть адаптер. Неправильно ли я пишу в автобус?