Как использовать C, чтобы открыть openwrt / dev / i2c-0 и отправить 128 байтов за раз - PullRequest
1 голос
/ 14 марта 2019

Я использую C, чтобы открыть openwrt / dev / i2c-0 на MT7688 и отправить 64 байта, это нормально работает.но отправка 128 байт делает ошибку.Я обнаружил, что отправка более 64 байтов будет неправильной.и я получил сообщение об ошибке « Неверный аргумент ».Я могу отправить 64 байта, так что это не SMbus.Я использую 128x64 OLED-экран, он должен посылать 130 байтов за раз.

#include <stdio.h>
#include <stdlib.h>
#include <sys/ioctl.h>
#include <fcntl.h>
#include <unistd.h>

#define I2C_SLAVE   0x0703

int main(int argc, char **argv) {
    int fd;

    /* is't work fine
    char buffer[63] = {0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,
                   0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,0x1B,0x1C,0x1D,0x1E,0x1F,
                   0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,0x2D,0x2E,0x2F,
                   0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,0x3D,0x3E,0x3F,
                   0x41,0x42,0x43
                  };
    */

    // does not send
    char buffer[128] = {0x01,0x02,0x03,0x04,0x05,....,0x80};

    fd = open("/dev/i2c-0", O_RDWR);
    if (fd < 0)
    {
      // Open port for reading and writing
      fprintf(stderr, "Failed to open i2c bus /dev/i2c-0\n");
      return 1;
    }

    ioctl(fd, I2C_SLAVE, 0x3C);
    write(fd, buffer, sizeof(buffer));
    close(fd);

    return 0;
}

Кто-нибудь знает, как это решить?

...