99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

linux找i2c命令 linux i2c命令

用linux 調用內核中的統一I2C驅動 i2c總是 busy,求大神支招,謝謝! 程序很短

最近我也遇到這個問題了,糾結了一天,在網友的支持下解決了,這個天嵌的版本中,i2c和他的攝像頭驅動(OV9650驅動)相沖突,你在編譯內核之前,將攝像頭的驅動全部去掉,這樣子重新編譯之后,i2c就可以正常測試使用了。

10余年的吉安網站建設經驗,針對設計、前端、開發、售后、文案、推廣等六對一服務,響應快,48小時及時工作處理。網絡營銷推廣的優勢是能夠根據用戶設備顯示端的尺寸不同,自動調整吉安建站的顯示方式,使網站能夠適用不同顯示終端,在瀏覽器中調整網站的寬度,無論在任何一種瀏覽器上瀏覽網站,都能展現優雅布局與設計,從而大程度地提升瀏覽體驗。創新互聯公司從事“吉安網站設計”,“吉安網站推廣”以來,每個客戶項目都認真落實執行。

linux 怎么加載i2c驅動

假設手上有一塊從淘寶上買來的開發板,我要在開發板的I2C總線上增加一個從設備(如at24c08),那么我要怎樣寫這個“I2C設備驅動”,讓

應用程序可以訪問at24c08呢?

先來看一個最簡單的i2c設備驅動:

static struct i2c_board_info at24cxx_info = { //所支持的i2c設備的列表

I2C_BOARD_INFO("at24c08", 0x50), //一項代表一個支持的設備,它的名字叫做“at24c08”,器件地址是0x50

};

static struct i2c_client *at24cxx_client;

static int at24cxx_dev_init(void)

{

struct i2c_adapter *i2c_adap; //分配一個適配器的指針

i2c_adap = i2c_get_adapter(0); //調用core層的函數,獲得一個i2c總線。這里我們已經知道新增的器件掛接在編號為0的i2c總線上

at24cxx_client = i2c_new_device(i2c_adap, at24cxx_info); // 把i2c適配器和新增的I2C器件關聯起來,這個用了i2c總線0,地址是0x50。這就組成了一個客戶端

at24cxx_client i2c_put_adapter(i2c_adap);

return 0;

}

static void at24cxx_dev_exit(void)

{

i2c_unregister_device(at24cxx_client);

}

module_init(at24cxx_dev_init);

module_exit(at24cxx_dev_exit);

linux下怎么直接使用iic接口

利用Linux中IIC設備子系統移植IIC設備驅動

背景描述

IIC總線在嵌入式系統中應用十分廣泛,常見的有eeprom,rtc。一般的處理器會包含IIC的控制器,用來完成IIC時序的控制;另外一方面,由于IIC的時序簡單,使用GPIO口來模擬時序也是常見的做法。面對不同的IIC控制器,各種各樣的芯片以及linux源碼,如何更快做好IIC設備驅動。

問題描述

在我們的方案中,我們會用到eeprom,rtc以及tw2865。由于Hi3520的IIC控制器設計有問題,無法正常使用。而IIC控制器的SDA和SCL管腳正好是和兩個GPIO管腳復用的。Hisi將控制gpio來實現IIC的時序,從而對IIC設備進行操作。這種設計方式簡單明了,但使用IIC子系統,可以更方便的移植和維護其他的設備驅動。

問題分析

Hisi對于gpio口,rtc芯片以及tw2865的處理方式如下:將gpio口做成一個模塊化的驅動,該驅動模擬IIC時序,并向外提供一些函數接口,比如:EXPORT_SYMBOL(gpio_i2c_read_tw2815);等。對于具體的rtc芯片,將其注冊為一個misc設備,并利用gpio模塊導出的函數進行rtc芯片的配置操作。

其實對于linux-2.6.24\drivers\i2c目錄下代碼,我們可以加以利用。

Linux的IIC字結構分為三個組成部分:

IIC核心

IIC核心提供了IIC總線驅動和設備驅動的注冊、注銷方法,IICalgorithm上層的、與具體適配器無關的代碼以及探測設備、檢測設備地址的上層代碼。

IIC總線驅動

IIC總線驅動是對IIC硬件體系結構中適配器端的實現。

IIC設備驅動

IIC設備驅動是對IIC硬件體系總設備端的實現。

我們查看下該目錄下的makefile和kconfig:

obj-$(CONFIG_I2C_BOARDINFO) +=i2c-boardinfo.o

obj-$(CONFIG_I2C) += i2c-core.o

obj-$(CONFIG_I2C_CHARDEV) +=i2c-dev.o

obj-y +=busses/ chips/ algos/

i2c-core.c就是IIC核心,buses中的文件是主流處理器中IIC總線的總線驅動,而chips中的文件就是常用芯片的驅動,algos中的文件實現了一些總線適配器的algorithm,其中就包括我們要用到的i2c-algo-bit.c文件。

我們首先利用i2c-gpio.c和i2c-algo-bit.c做好總線驅動。

在i2c-gpio.c中,module_init?i2c_gpio_init?platform_driver_probe(i2c_gpio_driver,i2c_gpio_probe);

將其注冊為platform虛擬總線的驅動。

在staticint __init i2c_gpio_probe(struct platform_device *pdev)中,

定義了如下三個結構體:

structi2c_gpio_platform_data *pdata;//平臺相關的gpio的設置

structi2c_algo_bit_data *bit_data;//包含algorithm的具體函數,setor

get SDA和SCL

structi2c_adapter *adap;//適配器

i2c_gpio_probe主要做了下面幾件事:

填充bit_data結構的各個函數指針,關聯到具體的操作SDA和SCl函數。

填充adap結構,adap-algo_data= bit_data;

pdata= pdev-dev.platform_data;

bit_data-data= pdata;

pdev-dev-driver_data= adap;

在i2c-core中注冊適配器類型。

inti2c_bit_add_numbered_bus(struct i2c_adapter *adap)

在staticint i2c_bit_prepare_bus(struct i2c_adapter *adap)中

adap-algo= i2c_bit_algo;

將i2c_bit_algo與adap關聯上。

static const structi2c_algorithm i2c_bit_algo = {

.master_xfer = bit_xfer,

.functionality = bit_func,

};

其中,master_xfer函數指針就是IIC傳輸函數指針。

I2c-algo-bit.c還實現了IIC開始條件,結束條件的模擬,發送字節,接收字節以及應答位的處理。

i2c-gpio.c中的i2c_gpio_setsda_val等函數是與具體平臺gpio相關的。

修改對應arch-hi3520v100目錄下的gpio.h中的各個函數,這些函數是通過操作寄存器來控制gpio的方向和值。

在對應mach-hi3520v100中的platform-devices.c中添加如下:

static structi2c_gpio_platform_data pdata = {

.sda_pin = 10,

.sda_is_open_drain = 1,

.scl_pin = 11,

.scl_is_open_drain = 1,

.udelay = 4, /* ~100 kHz */

};

static struct platform_devicehisilicon_i2c_gpio_device = {

.name = "i2c-gpio",

.id = -1,

.dev.platform_data = pdata,

};

static struct platform_device*hisilicon_plat_devs[] __initdata = {

hisilicon_i2c_gpio_device,

};

int __inithisilicon_register_platform_devices(void)

{

platform_add_devices(hisilicon_plat_devs,ARRAY_SIZE (hisilicon_plat_devs));

return 0;

}

通過platform添加devices和driver,使得pdev-dev.platform_data=pdata

綜合上面的過程,我們完成了adapter的注冊,并將用gpio口模擬的algorithm與adapter完成了關聯。

這樣,在rtc-x1205.c中,x1205_attach函數利用i2c核心完成client和adap的關聯。

在x1205_probe函數中填充i2c_client結構體,并調用i2c_attach_client通知iic核心。

接著注冊rtc驅動。

最后我們要讀取時間,就需要構造i2c_msg結構體,如下所示:

struct i2c_msg msgs[] = {

{ client-addr, 0, 2,dt_addr }, /* setup read ptr */

{ client-addr, I2C_M_RD,8, buf }, /* read date */

};

/* read date registers */

if((i2c_transfer(client-adapter, msgs[0], 2)) != 2) {

dev_err(client-dev,"%s: read error\n", __FUNCTION__);

return -EIO;

}

dt_addr是寄存器的地址,I2C_M_RD表示iicread。

本文名稱:linux找i2c命令 linux i2c命令
本文地址:http://www.yijiale78.com/article14/ddgcsde.html

成都網站建設公司_創新互聯,為您提供微信小程序服務器托管網站維護網站收錄品牌網站建設

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

外貿網站制作