Запись в шину 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

Я сомневаюсь, что это проблема типа конфигурации оборудования, так как я могу открыть адаптер. Неправильно ли я пишу в автобус?

0 ответов

Другие вопросы по тегам