日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux i2c 设备节点读写

發布時間:2025/4/5 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux i2c 设备节点读写 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近需要操作24C02,封裝了一下函數方便以后操作。

參考鏈接:

  https://my.oschina.net/handawei/blog/68526

  http://blog.csdn.net/onetwothreef/article/details/49488443

源碼:

#include <stdio.h> #include <linux/i2c.h> #include <linux/i2c-dev.h> #include <sys/stat.h> #include <sys/types.h> #include <fcntl.h> #include <string.h> #include <stdlib.h>#define I2C_DEFAULT_TIMEOUT 1 #define I2C_DEFAULT_RETRY 3/** fd : 文件描述符* timeout : 發送超時時間* retry : 重復發送次數*/ //重復發送次數可以設多一點,在調試的時候,只設置了一次,導致有時候發送會失敗。 int i2c_set(int fd, unsigned int timeout, unsigned int retry) {if (fd == 0 )return -1;if (ioctl(fd, I2C_TIMEOUT, timeout ? timeout : I2C_DEFAULT_TIMEOUT) < 0)return -1;if (ioctl(fd, I2C_RETRIES, retry ? retry : I2C_DEFAULT_RETRY) < 0)return -1;return 0; } /** fd : 文件描述符* addr : i2c的設備地址* reg : 寄存器地址* val : 要寫的數據* 描述 :從指定地址寫數據*/ int i2c_byte_write(int fd, unsigned char addr, unsigned char reg, unsigned char val) {int ret = 0;unsigned char outbuf[2];struct i2c_rdwr_ioctl_data packets;struct i2c_msg messages;packets.nmsgs = 1;packets.msgs = &messages;//發送要讀取的寄存器地址messages.addr = addr;messages.flags = 0;messages.len = 2; //寄存器地址加數據,共發送2個字節messages.buf = outbuf;outbuf[0] = reg;outbuf[1] = val;ret = ioctl(fd, I2C_RDWR, (unsigned long)&packets); //讀出來if (ret < 0)ret = -1;return ret; }/* * fd : 文件描述符* addr : i2c的設備地址* reg : 寄存器地址* val : 要寫的數據* len : 數據長度* 描述 :從指定地址寫數據* 24c02以8字節為1個page,如果在一個page里面寫,寫的字節長度超過這個page的末尾,* 就會從page的開頭寫,覆蓋開頭的內容*/ int i2c_nbytes_write(int fd, unsigned char addr, unsigned char reg, unsigned char *val, int len) {int ret = 0;struct i2c_rdwr_ioctl_data packets;struct i2c_msg messages;int i;packets.nmsgs = 1;packets.msgs = &messages;//發送要讀取的寄存器地址messages.addr = addr;messages.flags = 0; //writemessages.len = len + 1; //數據長度//發送數據messages.buf = (unsigned char *)malloc(len+1);if (NULL == messages.buf){ret = -1;goto err;}messages.buf[0] = reg;for (i = 0; i < len; i++){messages.buf[1+i] = val[i];}ret = ioctl(fd, I2C_RDWR, (unsigned long)&packets);//讀出來if (ret < 0){printf("write error!\n");return -1;}err:free(messages.buf);return ret; }/* * fd : 文件描述符* addr : i2c的設備地址* val : 保存讀取數據* 描述 :從當前地址讀取一個字節數據*/ int i2c_byte_read(int fd, unsigned char addr, unsigned char *val) {int ret = 0;struct i2c_rdwr_ioctl_data packets;struct i2c_msg messages;packets.nmsgs = 1; //數據幀類型只有一種,讀操作,只需要發送一個起始信號,因此是1packets.msgs = &messages;//發送要讀取的寄存器地址messages.addr = addr; //i2c設備地址messages.flags = I2C_M_RD; //讀操作messages.len = 1; //數據長度messages.buf = val; //讀取的數據保存在valret = ioctl (fd, I2C_RDWR, (unsigned long)&packets); //發送數據幀if (ret < 0)ret = -1;return ret; }/** fd : 文件描述符* addr : i2c的設備地址* reg : 寄存器地址* val : 保存讀取的數據* len : 讀取數據的長度* 描述 :讀取達到eeprom的末尾時,會讀取最開頭的字節*/ int i2c_nbytes_read(int fd, unsigned char addr, unsigned char reg, unsigned char *val, int len) {int ret = 0;unsigned char outbuf;struct i2c_rdwr_ioctl_data packets;struct i2c_msg messages[2];/* 數據幀類型有2種* 寫要發送起始信號,進行寫寄存器操作,再發送起始信號,進行讀操作,* 有2個起始信號,因此需要分開來操作。*/packets.nmsgs = 2; //發送要讀取的寄存器地址messages[0].addr = addr;messages[0].flags = 0; //writemessages[0].len = 1; //數據長度messages[0].buf = &outbuf; //發送寄存器地址outbuf = reg;//讀取數據messages[1].len = len; //讀取數據長度messages[1].addr = addr; //設備地址messages[1].flags = I2C_M_RD; //readmessages[1].buf = val;packets.msgs = messages;ret = ioctl(fd, I2C_RDWR, (unsigned long)&packets); //發送i2c,進行讀取操作 if (ret < 0)ret = -1;return ret; }

Tony Liu

2016-9-23, Shenzhen

總結

以上是生活随笔為你收集整理的linux i2c 设备节点读写的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 精品亚洲永久免费精品 | 久久视频在线免费观看 | 国产激情一区二区三区视频免樱桃 | 欧美日韩在线视频免费 | 疯狂做受xxxx国产 | 一级黄色免费片 | 伊人网成人网 | 色999视频| 中国一级特黄录像播放 | 亚洲综合色站 | 午夜精品视频一区二区三区在线看 | 国产精品拍拍 | 中文av资源 | 强行挺进白丝老师里呻吟 | 91最新视频 | 黄色你懂的 | 日韩视频福利 | 亚洲无吗在线 | 国产精品久久久久久久一区探花 | 人操人| 公侵犯人妻一区二区 | 日本黄在线 | 欧美午夜精品久久久久免费视 | 欧美野外猛男的大粗鳮 | 欧美一级性生活视频 | 91麻豆精品国产理伦片在线观看 | 久草最新 | 国产精品久久久久久久一区探花 | 91系列在线观看 | 校园春色av | 国产性生活毛片 | 午夜不卡视频 | 青青青在线观看视频 | 久久网站av | 蜜桃av噜噜一区二区三区网址 | 久久久久免费精品 | 中文字幕8 | 国产一区二区三区免费观看视频 | 国产在线观看成人 | 国产乱子伦一区二区 | 黑人精品欧美一区二区蜜桃 | 美女扒开粉嫩的尿囗给男生桶 | 亚洲石原莉奈一区二区在线观看 | 毛片高清免费 | 欧美激情在线看 | 久久午夜福利电影 | 成人日批视频 | 国产3区 | 天天爽夜夜爽一区二区三区 | 中文字幕亚洲精品在线 | 夜夜狠狠擅视频 | 色综合久久久久久 | 日本韩国欧美一区二区三区 | aaa毛片视频 | 国产偷人妻精品一区二区在线 | 欧美一级大片免费看 | 一本大道一区二区 | 打开免费观看视频在线 | 日韩天堂网 | 成人tv | 国产欧美一区二区三区鸳鸯浴 | 国产欧美久久久久久 | 天堂…中文在线最新版在线 | 亚洲丝袜色图 | 综合婷婷 | av五月天在线 | 捆绑最紧bdsm视频 | 天天草天天干 | 精品国产99一区二区乱码综合 | 韩毛片| 国产日产精品一区二区三区 | 日韩欧美成人网 | 色噜噜日韩精品欧美一区二区 | 天天躁日日躁狠狠躁喷水 | 免费看a级片 | 精品久久久中文字幕人妻 | 国产精品麻豆成人av电影艾秋 | 色久综合 | 女人叫床高潮娇喘声录音mp3 | 日韩一区二区a片免费观看 伊人网综合在线 | 综合久久五月 | 国产日韩av在线播放 | 99久久视频| 久久国产资源 | 欧美亚洲一级片 | 国产精品视频福利 | 成人在线激情 | 国产乱人| 国产一区二区三区四区五区在线 | 在线视频在线观看 | 成人一区二区av | 可以看的av网站 | 中文字幕欧美一区 | 久久久久99精品成人片直播 | 日韩av中字 | 亚洲免费高清视频 | 日韩精品人妻一区二区三区免费 | 日韩电影在线观看中文字幕 | 人人干夜夜操 |