linux驱动开发:24cxx设备的操作一

24cxx驱动编程.
1.首先实例化一个i2c设备.
2.编写对应的i2c设备驱动.
3.通过match规则匹配设备和驱动。对应驱动会调用自己的probe函数完成初始化
4.i2c设备的操作实现,write和read.

1)如何实例化一个i2c设备
在\Documentation\i2c\instantiating-devices文件中介绍了4种方法
实例化一个IIC设备
Method 1: Declare the I2C devices by bus number
Method 2: Instantiate the devices explicitly
Method 3: Probe an I2C bus for certain devices
Method 4: Instantiate from user-space

我们使用第一种方式:

Example (from omap2 h4):

static struct i2c_board_info __initdata h4_i2c_board_info[] = {
    {
        I2C_BOARD_INFO("isp1301_omap", 0x2d),
        .irq        = OMAP_GPIO_IRQ(125),
    },
    {   /* EEPROM on mainboard */
        I2C_BOARD_INFO("24c01", 0x52),
        .platform_data  = &m24c01,
    },
    {   /* EEPROM on cpu card */
        I2C_BOARD_INFO("24c01", 0x57),
        .platform_data  = &m24c01,
    },
};

static void __init omap_h4_init(void)
{
    (...)
    i2c_register_board_info(1, h4_i2c_board_info,
            ARRAY_SIZE(h4_i2c_board_info));
    (...)
}

I2C_BOARD_INFO(dev_type, dev_addr) 用来初始化 i2c_board_info结构,填充 type类型和 dev_addr地址.
根据线路图连接,确定 dev addr.
这里写图片描述
实际板子上是24c08.确认address:0x50.
这里需要说明一下,地址计算不算最后一个bit。也就是读写位,当发送读cmd时,最后一位置1,当发送写cmd时,最后一位置0.也就是说1010 000 x.高7bit代表地址,则1010000->0x50.
内核在发送read时,会 addr =0x50<<1 |1;当write 时,会 addr=0x50<<1 |0;

static struct i2c_board_info smdkv210_i2c_devs0[] __initdata = {
    { I2C_BOARD_INFO("24c08", 0x50), },
};
    i2c_register_board_info(0, smdkv210_i2c_devs0,
            ARRAY_SIZE(smdkv210_i2c_devs0));

i2c_register_board_info(int busnum, struct i2c_board_info const *info,unsigned n)

s5pv210有3组iic总线,我们的连接到iic0上。所以这边的0是有意义的.

只要这样,我们便可以添加一个新的i2c dev到 iic bus上.

当然内核中肯定有24cxx的驱动,我们可以直接拿来用。注意下match规格即可.当然也可以自己写这个驱动.

IIC总线的匹配规则:

这里写图片描述

IIC 驱动注册流程:

//驱动注册流程
i2c_add_driver
{
    --->i2c_register_driver
    {
        --->driver_register
        {
            --->bus_add_driver
            {
                --->driver_attach
              
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值