新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 用戶態應用程序直接訪問I2C驅動

        用戶態應用程序直接訪問I2C驅動

        作者: 時間:2016-11-21 來源:網絡 收藏
        #include "stdio.h"
        #include "stdlib.h"
        #include "string.h"
        #include "sys/types.h"
        #include "sys/stat.h"
        #include "fcntl.h"
        #include "i2c-dev.h" //調用來自“i2c-tools-3.1.0.tar.bz2”,包含操作I2C函數的聲明
        // i2c_usr_test r addr
        * i2c_usr_test w addr val
        //
        void print_usage(char *file)
        {
        printf("%s r addrn", file);
        printf("%s w addr valn", file);
        }
        int main(int argc, char **argv)
        {
        int fd;
        unsigned char addr, data;
        int dev_addr;
        if ((argc != 5) && (argc != 6))
        {
        print_usage(argv[0]);
        return -1;
        }
        fd = open(argv[1], O_RDWR);
        if (fd < 0)
        {
        printf("cant open %sn", argv[1]);
        return -1;
        }
        dev_addr = strtoul(argv[2], NULL, 0);
        if (ioctl(fd, I2C_SLAVE, dev_addr) < 0)
        {
        // ERROR HANDLING; you can check errno to see what went wrong //
        printf("set addr error!n");
        return -1;
        }
        if (strcmp(argv[3], "r") == 0)
        {
        addr = strtoul(argv[4], NULL, 0);
        data = i2c_smbus_read_word_data(fd, addr);
        printf("data: %c, %d, 0x%2xn", data, data, data);
        }
        else if ((strcmp(argv[3], "w") == 0) && (argc == 6))
        {
        addr = strtoul(argv[4], NULL, 0);
        data = strtoul(argv[5], NULL, 0);
        i2c_smbus_write_byte_data(fd, addr, data);
        }
        else
        {
        print_usage(argv[0]);
        return -1;
        }
        return 0;
        }


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 正阳县| 精河县| 遵化市| 逊克县| 三明市| 石柱| 河源市| 宝坻区| 垦利县| 永仁县| 明水县| 涪陵区| 牟定县| 迁西县| 平乡县| 木里| 建水县| 洛隆县| 平舆县| 连云港市| 吉林省| 义乌市| 若羌县| 安仁县| 寻甸| 普宁市| 成武县| 阿拉尔市| 武冈市| 澎湖县| 江西省| 临潭县| 凤城市| 灵川县| 富平县| 侯马市| 曲沃县| 商都县| 鄂尔多斯市| 庆云县| 巴东县|