重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都网站建设、成都网站设计、漯河网络推广、小程序设计、漯河网络营销、漯河企业策划、漯河品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;创新互联公司为所有大学生创业者提供漯河建站搭建服务,24小时服务热线:18982081108,官方网址:www.cdcxhl.com
仔细阅读上图中的下部分文字。
注意你的i2c_msg发送方式,决定了是否有pause。
注意图中,什么叫sr。
注意图上说的什么样的才是真i2c协议
i2c设备驱动涉及的linux i2c api:
参见include/linux/i2c.h
i2c_transfer()
i2c_master_send()、i2c_master_recv ()
i2c_smbus_xfer()
struct i2c_driver
struct i2c_client
i2c_get_clientdata()、i2c_set_clientdata()
i2c_register_driver()、i2c_del_driver ()
i2c_check_functionality()
arm device tree引入以前,i2c设备的生成是靠board中i2c_register_board_info(int busnum,struct i2c_board_info const *info, unsigned len) 进行加入。arm device tree后,由i2c host controller driver根据自己的device node下面的子节点,通过i2c_register_adapter()时调用of_i2c_register_devices()进而调用i2c_new_device()来创建struct i2c_client 。进而也确定了struct i2c_client和struct i2c_adapter的父子关系。
在实际的i2c设备驱动编写时,需要注意,一般i2c设备总是容易出现偶尔的访问无应答(访问失败的情况),所以一般都需要加入retry重试5次以内的方式加入重试机制。有的甚至在每次重试间(两次调用i2c_transfer()之间),不但要加入msleep,还需要重新上电,具体取决于i2c设备本身。
具体请参考我的免费的linux各种驱动开发课程如下:
https://edu.51cto.com/course/17138.html
另外我的相关培训视频请看:
欢迎观看我发布的各个课程: https://edu.51cto.com/lecturer/8896847.html
我的新的更多优惠的打包课程链接如下:
https://edu.51cto.com/sd/0a9d4