導航:首頁 > 操作系統 > linux內核i2c

linux內核i2c

發布時間:2023-01-08 17:47:24

1. linux內核i2c設備驅動里的s3c_i2c_irq_nextbyte()函數中的retry_write為什麼不在ack

to_i2c_client(dev) 這個函數返回值是一個指針,這個指針是個struct i2c_client 類型的指針,這個指針指向塊內存,內存中存放著 to_i2c_client(dev)這個函數產生的數據。。

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

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

3. Linux內核gpio

本文基於 RockPI 4A 單板 Linux 4.4 內核介紹 RK3399 Linux GPIO 功能。

GPIO(General Purpose Input/Output Port) :通用輸入輸出埠。

除作為一般的輸入/輸出功能外,還可以配置為中斷和模擬 PWM、I2C 等介面功能。

RK3399 GPIO 屬性如下:

1、一共有5組 GPIO(GPIO0~4) ,每組 GPIO 為一個 Bank ,共32個引腳。每個 Bank 包括4個 Group (GPIOA(0~7) ~ D(0~7)) 。不是所有 Bank 都有 GPIOA~D 的編號, RK3399 共122個 GPIO 引腳。

2、所有 GPIO 都可被配置為 CA55或CA53 的中斷功能,且 GPIO0 和 GPIO1 可用於系統低功耗喚醒模式。

3、在上電復位後,所有 GPIO 默認輸入狀態。

4、軟體可配置 GPIO 驅動強度。

RK3399 引腳在系統中顯示如下:

RK3399 GPIO 引腳號計算方式:

例:

以 ROCKPI 4A 單板 WIFI 模塊電源( GPIO0_B2 )為例,介紹 DTS 中 GPIO 配置。

在系統啟動後,可以查看 GPIO ,命令如下:

註:

如果debugfs沒有掛載,使用下面命令掛載

Linux 內核 GPIO 主要實現文件:

GPIO 子系統有兩套 API :

1、基於描述符(descriptor-based)

前綴為: gpiod_ 。

參考: Documentation/gpio/consumer.txt

2、老版本介面(legacy)

前綴為: gpio_ 。

參考: Documentation/gpio/gpio-legacy.txt

3、常用API

GPIO 還有很多介面,就不一一列舉了。

RK3399 GPIO 控制器驅動實現文件: drivers/pinctrl/pinctrl-rockchip.c ,涉及主要函數:

所有 GPIO 子系統的 API 最終都會調到 SOC 的 GPIO 控制器驅動函數。

ROCKPi 4A 單板有個40個引腳的擴展口,引用 radxa 圖片,見下圖。

1、進入測試目錄

2、導出GPIO

在使用 GPIO2_A7 前,需要導出該引腳。方法:配置 export 後,會出現 gpio71 節點。

測試時,注意不要使用在程序中已經申請過或配置為其它功能的 GPIO 引腳。

3、配置GPIO方向

設置 GPIO2_A7 的輸入/輸出方向。

in :表示輸入。

out :表示輸出。

active_low :用於中斷配置中高電平或低電平有效。

edge :用於中斷配置中上升沿或下降沿有效。

4、配置GPIO輸出值

在 GPIO 為輸入時,通過 value 查詢 GPIO 的輸入電平(高或低電平)。

在 GPIO 為輸出時,通過 value 配置 GPIO 的輸出電平(高或低電平)。

5、查看GPIO

查看已經導出的 GPIO71 。

6、取消導出

使用完 GPIO2_A7 後,需要進行釋放。方法:配置 unexport 後, gpio71 節點會消失。

4. 用linux 調用內核中的統一I2C驅動 i2c總是 busy,求大神支招

希望能幫到你。
沒這樣用過,以前都是直接對/sys/bus/i2c/devices/0-0050/eeprom操作。
代碼里有兩次寫,一次讀,是在哪一次出錯?

5. 如何用linux 內核提供的i2c bus匯流排進行fan風扇驅動開發

希望能幫到你。 沒這樣用過,以前都是直接對/sys/bus/i2c/devices/0-0050/eeprom操作。 代碼里有兩次寫,一次讀,是在哪一次出錯?

6. linux i2c時鍾rtc該怎樣配置內核

i2c是master和client架構,master就是主控制器這邊的驅動,client就是設備這邊的驅動,master一般都寫好了,你只需要寫相應的client驅動,也就是設備驅動,然後在板級文件裡面注冊一個設備。就可以啦。

7. 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中,mole_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 = 1<<0,

.sda_is_open_drain = 1,

.scl_pin = 1<<1,

.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。

8. linux內核中i2c匯流排驅動對所有的i2c設備是否是通用的

i2C匯流排的驅動程序一般針對不同的CPU是不一樣的,所以都位於arch目錄下對應的cpu架構的common文件夾下。
對同一種架構的來看,I2C驅動僅實現底層的通信。故其是通用的。

9. 求教高手,在linux內核中怎麼修改i2c的通信速率為400KHz

1、先查看I2C設備速率。

sudocat/sys/mole/i2c_bcm2708/parameters/baudrate

默認的I2C速度為100KHz,對於多數I2C設備而言100KHz並不算快。

cd/etc/modprobe.d#進入/etc/modprobe.d目錄
sudonanocustom.conf#在該目錄新建一個名為custom.conf文件,並插入以下內容
#optionsi2c_bcm2708baudrate=400000
sudoreboot#重啟系統

閱讀全文

與linux內核i2c相關的資料

熱點內容
最強大逃頂通達信指標源碼 瀏覽:441
java程序員面試寶典歐立奇 瀏覽:457
cad命令不要跟著游標 瀏覽:200
騰訊軟體伺服器是什麼 瀏覽:894
高中單片機 瀏覽:347
正則命令 瀏覽:341
javawin10配置環境變數 瀏覽:564
梁全長箍筋加密怎麼設置 瀏覽:403
蘋果appstore怎麼填 瀏覽:688
radiogroupandroid 瀏覽:152
微信加密手機店能破解嗎 瀏覽:952
如何更換win7補丁伺服器地址 瀏覽:702
如何舉報dota2伺服器 瀏覽:584
蘋果怎麼打鏈接微信文件夾 瀏覽:366
阿拉德之路怎麼蘋果跟安卓一起玩 瀏覽:241
主力排序選股源碼 瀏覽:149
android無法生成apk文件 瀏覽:505
如何開一個掛網頁的伺服器 瀏覽:538
虞城車輛解壓去哪裡 瀏覽:759
如何發送戰艦世界命令 瀏覽:609