I2C裝置驅動流程

2021-09-30 07:32:31 字數 2512 閱讀 3463

一、

i2c裝置

驅動流程

1) i2c_register_board_info

定義i2c

器件資訊(

name

address

etc.

)static struct i2c_board_info __initdata pi2c_board_info = ,

};i2c_register_board_info(1, array_and_size(pi2c_board_info));

/* 1

表示該i2c

裝置掛在

i2c-1

上,註冊

i2c adapt

時相應的

id = 1 */

/* i2c */

static struct i2c_gpio_platform_data i2c_bus_data = ;

static struct platform_device i2c_bus_device = };將

i2c器件資訊註冊到

i2c的器件列表中:

struct i2c_devinfo ;

int __init

i2c_register_board_info(int busnum,

struct i2c_board_info const *info, unsigned len)

devinfo->busnum = busnum;

devinfo->board_info = *info;

list_add_tail(&devinfo->list,

&__i2c_board_list

);/*

加入__i2c_board_list

鍊錶中*/

}up_write(&__i2c_board_lock);

return status;

}2)

註冊i2c device

i2c_register_adapter -> i2c_scan_static_board_info -> i2c_new_device

struct i2c_client *

i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)

/* check for address business */

status = i2c_check_addr_busy(adap, client->addr);

if (status)

goto out_err;

client->dev.parent = &client->adapter->dev;

client->dev.bus = &i2c_bus_type;

client->dev.type = &i2c_client_type;

dev_set_name(&client->dev, "%d-%04x", i2c_adapter_id(adap),

client->addr);

status = device_register(&client->dev);/*

註冊器件

*/if (status)

goto out_err;…}

3) i2c

讀寫static inline int pm860x_read_device(struct i2c_client *i2c,

int reg, int bytes, void *dest)

static inline int pm860x_write_device(struct i2c_client *i2c,

int reg, int bytes, void *src)

/* i2c-core.c

函式*/

int i2c_master_send(struct i2c_client *client, const char *buf, int count)

int i2c_master_recv(struct i2c_client *client, char *buf, int count)

二、i2c

時序1) start/stop

時序2)i2c

器件位址結構

(bit7~bit1)

fixme:」1」 read, 「0」 write

3) 位元組寫

start + ( device address +w ) + (register address) + (

data

) + stop

4) 多位元組寫

5) *

讀操作start + (device address + w) + (register address)

+restart + (device address + r) +(

data

) +stop

i2c裝置驅動

1,i2c 裝置註冊 static struct i2c board info i2c2 devices i2c裝置一般在板級 中註冊 static void msm8916 add i2c deivces void 2,i2c驅動註冊 include static const struct i2c...

Linux驅動之I2C裝置驅動

核心 4.20 晶元 hym8563 rtc 下面的 分析主要都在注釋中,會按照驅動中函式的執行順序分析。static const struct i2c device id hym8563 id module device table i2c,hym8563 id static const stru...

I2C裝置驅動的編寫

前面我們說了如何i2c使用者模式驅動,這種驅動基於i2c子系統,但是他對於應用程式開發人員的要求較高,需要應用程式開發人員了解硬體的一些東西,比如時序,位址等等,而多數時候應用程式開發人員是按照操作檔案的方法操作裝置,所以我們更希望用一些更簡單的介面去訪問。也就是我們今天的內容 基於i2c子系統的字...