基于Linux的i2c入门教程·(待周末)

 

      对于i2c的理解与讲解,大家可以百度一下。网上的东西杂乱,而且可能是错的,不过那些错误不会阻碍我们掌握i2c的运用与理解。当然,理解归理解,我在这里将i2c的使用方法给自己做了一个“标准”,仅供大家参考。(i2c子系统驱动编写有多种方法)

       大家可以先理解一下i2c子系统的架构:https://blog.csdn.net/hanp_linux/article/details/72832158

 

一、device部分

                 两组对应函数:

                 i2c_get_adapter();获取第 nr 条i2c物理总线对应的adapter         -------->返回值为adapter结构体

                 i2c_put_adapter();释放adapter结构体(习惯用完adapter马上释放资源)

 

                i2c_new_device();在文件系统中手动注册一个i2c设备                 --------->返回值为client结构体(包含设备信息)

                i2c_unregister_device();注销i2c设备

 

             (在学习过程,i2c有几个结构体需要弄清楚一下,这里有偏文章:https://blog.csdn.net/yulay01/article/details/7891937

                 i2c_driver与i2c_client: 二者是写driver和device用,共同构成驱动

                i2c_adapter 对应于物理上的一个适配器,而i2c_algorithm对应一套通信方法,缺少i2c_algorithm的i2c_adapter什么也做 不了,因此i2c_adapter中包含其使用的 i2c_algorithm的指针。)

#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/i2c.h>

//标准i2c使用方法-----client端

static  struct i2c_board_info  g_tdevinfo = {
		I2C_BOARD_INFO("i2c_dev", 0x25),       
       //封装的赋值函数(由于其他的成员无需配置,习惯用此函数赋值name和addr)
};
static  struct i2c_client*  g_ptclient = NULL;

static  int  __init  test_i2c_client_init(void)
{
	struct i2c_adapter*  g_ptadapter = NULL;	

	g_ptadapter = i2c_get_adapter(1);
	g_ptclient = i2c_new_device(g_ptadapter, &g_tdevinfo);
	i2c_put_adapter(g_ptadapter);

	return 0;
}

static  void  __exit  test_i2c_client_exit(void)
{
	i2c_unregister_device(g_ptclient);
}

module_init(test_i2c_client_init);
module_exit(test_i2c_client_exit);

MODULE_LICENSE("GPL");

二、driver部分

             两个函数:

                i2c_register_driver(THIS_MODULE, &g_ti2cDrv);  在系统启动时注册某一条i2c物理总线上的多个i2c设备到i2c子系统

                i2c_del_driver(&g_ti2cDrv);
 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值