首页 > 其他分享 >I2C系统框架(1)

I2C系统框架(1)

时间:2024-03-30 18:33:05浏览次数:38  
标签:i2c struct 框架 int adapter 系统 I2C define

学习资料:韦东山第三期   i2c_adapter: nr:第几路i2c总线 xfer:读写操作

 struct i2c_adapter {
         struct module *owner;
         unsigned int class;               /* classes to allow probing for */
         const struct i2c_algorithm *algo; /* the algorithm to access the bus */
         void *algo_data;

         /* data fields that are valid for all devices   */
         struct rt_mutex bus_lock;

         int timeout;                    /* in jiffies */
         int retries;
         struct device dev;              /* the adapter device */

         int nr;
         char name[48];
         struct completion dev_released;

         struct mutex userspace_clients_lock;
         struct list_head userspace_clients;

         struct i2c_bus_recovery_info *bus_recovery_info;
         const struct i2c_adapter_quirks *quirks;
 };

 struct i2c_algorithm {
         /* If an adapter algorithm can't do I2C-level access, set master_xfer
            to NULL. If an adapter algorithm can do SMBus access, set
            smbus_xfer. If set to NULL, the SMBus protocol is simulated
            using common I2C messages */
         /* master_xfer should return the number of messages successfully
            processed, or a negative value on error */
         int (*master_xfer)(struct i2c_adapter *adap, struct i2c_msg *msgs,
                            int num);
         int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr,
                            unsigned short flags, char read_write,
                            u8 command, int size, union i2c_smbus_data *data);

         /* To determine what the adapter supports */
         u32 (*functionality) (struct i2c_adapter *);

 #if IS_ENABLED(CONFIG_I2C_SLAVE)
         int (*reg_slave)(struct i2c_client *client);
         int (*unreg_slave)(struct i2c_client *client);
 #endif
 };
 
 struct i2c_msg {
         __u16 addr;     /* slave address                        */
         __u16 flags;
 #define I2C_M_RD                0x0001  /* read data, from slave to master */
                                         /* I2C_M_RD is guaranteed to be 0x0001! */
 #define I2C_M_TEN               0x0010  /* this is a ten bit chip address */
 #define I2C_M_DMA_SAFE          0x0200  /* the buffer of this message is DMA safe */
                                         /* makes only sense in kernelspace */
                                         /* userspace buffers are copied anyway */
 #define I2C_M_RECV_LEN          0x0400  /* length will be first received byte */
 #define I2C_M_NO_RD_ACK         0x0800  /* if I2C_FUNC_PROTOCOL_MANGLING */
 #define I2C_M_IGNORE_NAK        0x1000  /* if I2C_FUNC_PROTOCOL_MANGLING */
 #define I2C_M_REV_DIR_ADDR      0x2000  /* if I2C_FUNC_PROTOCOL_MANGLING */
 #define I2C_M_NOSTART           0x4000  /* if I2C_FUNC_NOSTART */
 #define I2C_M_STOP              0x8000  /* if I2C_FUNC_PROTOCOL_MANGLING */
         __u16 len;              /* msg length                           */
         __u8 *buf;              /* pointer to msg data                  */
 };
 
  struct i2c_client {
         unsigned short flags;           /* div., see below              */
 #define I2C_CLIENT_PEC          0x04    /* Use Packet Error Checking */
 #define I2C_CLIENT_TEN          0x10    /* we have a ten bit chip address */
                                         /* Must equal I2C_M_TEN below */
 #define I2C_CLIENT_SLAVE        0x20    /* we are the slave */
 #define I2C_CLIENT_HOST_NOTIFY  0x40    /* We want to use I2C host notify */
 #define I2C_CLIENT_WAKE         0x80    /* for board_info; true iff can wake */
 #define I2C_CLIENT_SCCB         0x9000  /* Use Omnivision SCCB protocol */
                                         /* Must match I2C_M_STOP|IGNORE_NAK */

         unsigned short addr;            /* chip address - NOTE: 7bit    */
                                         /* addresses are stored in the  */
                                         /* _LOWER_ 7 bits               */
         char name[I2C_NAME_SIZE];
         struct i2c_adapter *adapter;    /* the adapter we sit on        */
         struct device dev;              /* the device structure         */
         int init_irq;                   /* irq set at initialization    */
         int irq;                        /* irq issued by device         */
         struct list_head detected;
 #if IS_ENABLED(CONFIG_I2C_SLAVE)
         i2c_slave_cb_t slave_cb;        /* callback for slave mode      */
 #endif
 };
子设备用i2c_client结构体表示,这个结构体里面肯定有addr,adapter,挂在哪一条总线上   传输的数据使用i2c_msg表示,.buf表示数据  
int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
最终使用i2c_transfer函数在adap找到传输函数,把msgs传给设备,设备的地址和buf在msgs里面包含有,是复数   举例:设备地址为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;

 

 

 

 

标签:i2c,struct,框架,int,adapter,系统,I2C,define
From: https://www.cnblogs.com/lethe1203/p/18105847

相关文章

  • I2C Block读写和SMBus Block读写区别
    资料来源:韦东山第三期 SMBusBlock读:对应i2c-tools中的函数:i2c_smbus_read_block_data() SMBusBlock写:对应i2c-tools中的函数:i2c_smbus_write_block_data() I2CBlock读:对应i2c-tools中的函数:i2c_smbus_read_i2c_block_data() I2CBlock写:对应i2c-tools中的......
  • 安卓UI框架布局设计
    文章目录一、AndroidSDK中最常用的布局类1.1框架布局1.2线性布局-LinearLayout1.3相对布局(RelativeLayout)1.4网格布局二、UI布局2.1View视图2.2ViewGroup布局管三、再说明Android布局的类型3.0两种方式定义布局(1)在XML中声明UI元素(2)在运行时实例化布......
  • 面向对象高级实战演练之银行系统
    功能说明:1-银行管理员(使用管理员密码)查看所有用户信息2-进入银行系统提示功能3-用户密码管理4-账户开户/销户5-存款/取款6-用户间转账7-用户余额查询8-常见错误检查和提示代码实现:importrandomimportstringclassAccount(object):def__......
  • 【全开源】JAVA上门家政服务系统源码微信小程序+微信公众号+APP+H5_博纳软云
    上门家政服务系统源码微信小程序——让便捷服务触手可及在现代社会,家政服务的需求日益增长,而如何快速、便捷地找到优质的家政服务成为了许多家庭关注的焦点。为此,我们推出了上门家政服务系统源码微信小程序,让便捷服务触手可及。这款微信小程序不仅集成了丰富的家政服务资源,还......
  • 【全开源】JAVA语聊大厅+陪玩系统语音聊天APP系统源码_博纳软云
    JAVA语聊大厅+陪玩系统语音聊天APP系统源码,融合了先进的JAVA技术和独特的陪玩系统,为用户带来了全新的语音社交体验。该系统源码不仅具备JAVA语言的高效稳定特性,还通过陪玩系统的引入,让用户在享受语音聊天的乐趣之余,更能找到心仪的玩伴,一同畅游在精彩的游戏世界。在语聊大厅中,......
  • 基于JavaWeb的家居商城系统的设计与实现论文
    摘要随着科学技术的飞速发展,各行各业都在努力与现代先进技术接轨,通过科技手段提高自身的优势;对于家居商城系统当然也不能排除在外,随着网络技术的不断成熟,带动了家居商城系统,它彻底改变了过去传统的管理方式,不仅使服务管理难度变低了,还提升了管理的灵活性。这种个性化的平......
  • 【全开源】无人共享棋牌室茶室台球室系统JAVA版本支持微信小程序+微信公众号_博纳软云
    在繁忙的都市生活中,寻找一处静谧的棋牌室、茶室或台球室,已成为许多人放松身心、享受闲暇时光的理想选择。为满足这一市场需求,我们推出了无人共享棋牌室茶室台球室系统JAVA版本,支持微信小程序和微信公众号,为您带来全新的智能体验。该系统采用先进的JAVA技术开发,实现了无人值守......
  • 基于SpringBoot+Vue的高校工作室管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我自己的网站自己的小程序(小蔡coding)代码参考数据库参考源码获取前言......
  • 【全开源】JAVA语聊大厅+陪玩系统语音聊天APP系统源码_博纳软云
    JAVA语聊大厅+陪玩系统语音聊天APP系统源码,融合了先进的JAVA技术和独特的陪玩系统,为用户带来了全新的语音社交体验。该系统源码不仅具备JAVA语言的高效稳定特性,还通过陪玩系统的引入,让用户在享受语音聊天的乐趣之余,更能找到心仪的玩伴,一同畅游在精彩的游戏世界。在语聊大厅中,......
  • 【全开源】无人共享棋牌室茶室台球室系统JAVA版本支持微信小程序+微信公众号_博纳软云
    在繁忙的都市生活中,寻找一处静谧的棋牌室、茶室或台球室,已成为许多人放松身心、享受闲暇时光的理想选择。为满足这一市场需求,我们推出了无人共享棋牌室茶室台球室系统JAVA版本,支持微信小程序和微信公众号,为您带来全新的智能体验。该系统采用先进的JAVA技术开发,实现了无人值守......