首页 > 其他分享 >I2C系统的重要结构体 -4

I2C系统的重要结构体 -4

时间:2023-07-16 21:57:38浏览次数:34  
标签:I2C msgs 系统 传输 Controller msg i2c 结构

I2C系统的重要结构体

参考资料:

  • Linux驱动程序: drivers/i2c/i2c-dev.c

  • I2CTools: https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/

 

1. I2C硬件框架

 

 

2. I2C传输协议

  • 写操作

 

  • 读操作

 

 

 

3. Linux软件框架

 

4. 重要结构体

使用一句话概括I2C传输:APP通过I2C Controller与I2C Device传输数据。

在Linux中:

  • 怎么表示I2C Controller

    • 一个芯片里可能有多个I2C Controller,比如第0个、第1个、……

    • 对于使用者,只要确定是第几个I2C Controller即可

    • 使用i2c_adapter表示一个I2C BUS,或称为I2C Controller

    • 里面有2个重要的成员:

      • nr:第几个I2C BUS(I2C Controller)

      • i2c_algorithm,里面有该I2C BUS的传输函数,用来收发I2C数据

    • i2c_adapter

     

    • i2c_algorithm 

       

  • 怎么表示I2C Device

    • 一个I2C Device,一定有设备地址

    • 它连接在哪个I2C Controller上,即对应的i2c_adapter是什么

    • 使用i2c_client来表示一个I2C Device 

       

  • 怎么表示要传输的数据

    • 在上面的i2c_algorithm结构体中可以看到要传输的数据被称为:i2c_msg

    • i2c_msg 

       

    • i2c_msg中的flags用来表示传输方向:bit 0等于I2C_M_RD表示读,bit 0等于0表示写

    • 一个i2c_msg要么是读,要么是写

    • 举例:设备地址为0x50的EEPROM,要读取它里面存储地址为0x10的一个字节,应该构造几个i2c_msg?

      • 要构造2个i2c_msg

      • 第一个i2c_msg表示写操作,把要访问的存储地址0x10发给设备

      • 第二个i2c_msg表示读操作

      • 代码如下

        u8 data_addr = 0x10;
        i8 data;
        struct i2c_msg msgs[2];

        msgs[0].addr   = 0x50;
        msgs[0].flags  = 0;
        msgs[0].len    = 1;
        msgs[0].buf    = &data_addr;

        msgs[1].addr   = 0x50;
        msgs[1].flags  = I2C_M_RD;
        msgs[1].len    = 1;
        msgs[1].buf    = &data;

5. 内核里怎么传输数据

使用一句话概括I2C传输:

  • APP通过I2C Controller与I2C Device传输数据

  • APP通过i2c_adapter与i2c_client传输i2c_msg

  • 内核函数i2c_transfer

    • i2c_msg里含有addr,所以这个函数里不需要i2c_client

     

  •  

标签:I2C,msgs,系统,传输,Controller,msg,i2c,结构
From: https://www.cnblogs.com/liusiluandzhangkun/p/17558635.html

相关文章

  • 无需编写驱动直接访问设备\_I2C-Tools介绍 -5
    无需编写驱动直接访问设备_I2C-Tools介绍参考资料:Linux驱动程序:drivers/i2c/i2c-dev.cI2C-Tools-4.2:https://mirrors.edge.kernel.org/pub/software/utils/i2c-tools/AP3216C:gitclonehttps://e.coding.net/weidongshan/01_all_series_quickstart.git该GIT仓......
  • Java项目12306售票系统
    Java项目12306售票系统 目录(一)系统功能概述3(二)系统功能模块结构31.前端功能32.WEB服务端43.数据库端4(三)系统界面设计51.登陆界面52.注册界面53.操作成功界面提示64.操作失败界面提示65.导航页76.购票页87.购买后打印电子车票页88.退票页与结果提示页89......
  • 设备驱动-10.中断子系统-4.1中断下半部使用-tasklet
    1中断下半部分引入引入中断下半部介绍了硬件中断和软件中断,硬件中断有gpio中断,网卡,外部电路IP引起的中断,而软件中断则有定时器,tasklet这些为软件中断。cpu会先处理硬件中断,然后处理软件中断。简单说可以认为内核中有一个数组softirq[],里面有很多项,某一项都应timer,某一项表示t......
  • 高级java高并发,高性能,分布式,高可用,负载均衡,系统架构实战
    提到锁,大家肯定想到的是sychronized关键字。是用它可以解决一切并发问题,但是,对于系统吞吐量要求更高的话,我们这提供几个小技巧。帮助大家减小锁颗粒度,提高并发能力。初级技巧-乐观锁乐观锁使用的场景是,读不会冲突,写会冲突。同时读的频率远大于写。悲观锁的实现: 悲观的认为所......
  • windows与archlinux双系统安装记录
    参考博客1 https://zhuanlan.zhihu.com/p/138951848archlinux安装u盘制作软件rufus u盘数据备份镜像下载安装U盘制作,参考博客2 u盘制作 这个图片来自旁边的链接  注意:写入方式为DD而非ISO,选项那选择GPT而非默认的MBR,其他的按照旁边的图来就行,没有的就默认从windo......
  • SSD结构介绍
    二、SSD结构介绍a)    逻辑结构三大模块:前端、中端FTL层、后端 前端(SSD接口层):负责通过相关标准协议与主机PC进行通信,接受串行比特数据流,转换为数字信号给后续模块使用,协议有SATA、SAS、PCIe等;中端FTL层:负责完成主机逻辑地址空间到闪存物理地址空间的映射、坏块管理、......
  • information_schema系统数据库
    1.schemata表schema_name为mysql所有数据库的名字2.tables表table_schema为所有数据库的名字(不同于schema_name,它是一张表对应一个table_schema,数量大于等于总数据库数量)table_name为所有表的名字 3.columns表table_schema,table_name同tables表,column_name为所有表列......
  • Java-Day-32( 多用户即时通信系统 —— 文件传输 + 服务器推送新闻 + 离线留言 )
    Java-Day-32多用户即时通信系统文件传输思路:客户端里先把文件读取到客户端为字节数组,把文件对应的字节数组封装到message对象,内含文件内容、sender、getter,将message对象发送给服务端拆解message对象获取getterid,获取客户端被指定的接收用户的通信线程,把message转......
  • 计算机系统基础PA0
    实验前的阅读传自远古时代的OS实验课程网站中的Linux入门教程     一个有意思的问题想要回答这个问题就要知道什么是manpage不妨manman  看来,当我们执行manxxx时,给出的是xxx的参考文档 能被man识别到的xxx有以下几类: ......
  • 远雀项目管理,极简轻量级项目协同工具,免费项目管理系统
    远雀项目管理(开源免费)——极简轻量级项目协同工具1.介绍追求极简、高效,完成项目管理核心功能的前提下,最大限度减少无效操作和输入。2.核心功能任务发布:以待办、交办进行任务分发,进度填报反馈,自动汇总;计划管理:明确计划内容,时间、责任人。自动推送到人,进度自动统计;周报日报......