国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

ArmSom---I2C開發(fā)指南

這篇具有很好參考價值的文章主要介紹了ArmSom---I2C開發(fā)指南。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1. 簡介

  • RK3588從入門到精通

  • 本?介紹在rockchip平臺下如何配置i2c接口的方法并且添加調(diào)試驗證i2c外設(shè)的例子

  • 開發(fā)板:ArmSoM-W3

  • Kernel:5.10.160

  • OS:Debian11

2. i2c接口概述

i2c 總線控制器通過串行數(shù)據(jù)(SDA)線和串行時鐘 (SCL)線在連接到總線的器件間傳遞信息。

i2c總線一些特征:

  1. 只有兩根線分別是串行數(shù)據(jù)線(SDA),串行時鐘線(SCL)。

  2. 每個器件都有一個唯一的地址識別

  3. 使用串行8位雙向數(shù)據(jù)傳輸方式。

  4. 可以使用普通GPIO口模擬I2C,但要需要將GPIO配置成OD模式(開漏模式)

3. 芯片i2c資源

RK3588旗艦芯片上可使用的I2C有9組,ArmSoM SOM-3588-LGA核心板采用LGA 506引腳封裝方式將I2C資源全部引出,ArmSoM-W3板子上接有部分i2c外設(shè)以及40PIN資源如下:

ArmSom---I2C開發(fā)指南,RK3588從入門到精通,嵌入式硬件,linux,kernel,開源
ArmSom---I2C開發(fā)指南,RK3588從入門到精通,嵌入式硬件,linux,kernel,開源

4. i2c使用

RK3588使用I2C 的驅(qū)動是i2c-rk3x.c,參考文件 kernel/Documentation/devicetree/bindings/i2c/i2c-rk3x.txt。

4.1 DTS配置

i2c資源使用只需要在設(shè)備樹下進行配置,例如上述RTC芯片的配置如下:

&i2c6 {
	status = "okay";
	//i2c-scl-rising-time-ns = <265>;
	//i2c-scl-falling-time-ns = <11>;
	//clock-frequency = <400000>;

	hym8563: hym8563@51 {
		compatible = "haoyu,hym8563";
		reg = <0x51>;
		#clock-cells = <0>;
		clock-frequency = <32768>;
		clock-output-names = "hym8563";
		pinctrl-names = "default";
		pinctrl-0 = <&rtc_int>;
		interrupt-parent = <&gpio0>;
		interrupts = <RK_PB0 IRQ_TYPE_LEVEL_LOW>;
	};
};

參數(shù)說明:

  • clock-frequency: 默認 frequency 為 100k 可不配置,其它 I2C 頻率需要配置,最大可配置頻率由i2c-scl-rising-time-ns 決定;例如配置 400k,clock-frequency=<400000>。
  • i2c-scl-rising-time-ns:SCL 上升沿時間由硬件決定,例如測得 SCL 上升沿 365ns,i2c-scl-rising-time-ns=<365>。(默認可以不配置)
  • i2c-scl-falling-time-ns: SCL 下降沿時間, 一般不變, 等同于 i2c-sda-falling-time-ns。(默認也可以不配置)

在使用i2c設(shè)備樹配置的時候,有些方面需要注意:

1.上述rtc使用的引腳是I2C6_SDA_M0和I2C6_SCL_M0,硬件接口有些可以使用I2C6_SDA_M1,或者I2C6_SDA_M3,要修改默認配置

 i2c6: i2c@fec80000 {
  compatible = "rockchip,rk3588-i2c", "rockchip,rk3399-i2c";
  reg = <0x0 0xfec80000 0x0 0x1000>;
  clocks = <&cru 146>, <&cru 138>;
  clock-names = "i2c", "pclk";
  interrupts = <0 323 4>;
  pinctrl-names = "default";
  pinctrl-0 = <&i2c6m0_xfer>;//&i2c6m1_xfer、&i2c6m3_xfer
  #address-cells = <1>;
  #size-cells = <0>;
  status = "disabled";
 };
  1. i2c地址主要由7bit的二進制數(shù)值組成,最低位是讀寫標志位,0表示寫,1表示讀

    比如:讀,0A3H 寫,0A2H
    在linux驅(qū)動中要取這個ic設(shè)備的從設(shè)備地址,就是0xA3或者0xA2右移一位得到

4.2 GPIO 模擬 I2C

I2C 用 GPIO 模擬,內(nèi)核已經(jīng)有實現(xiàn),請參考文檔:Documentation/devicetree/bindings/i2c/i2c-gpio.txt
下面是使用的例子,dts 下配置 I2C 節(jié)點。

i2c@4 {
    compatible = "i2c-gpio";
    gpios = <&gpio5 9 GPIO_ACTIVE_HIGH>, /* sda */
    <&gpio5 8 GPIO_ACTIVE_HIGH>; /* scl */
    i2c-gpio,delay-us = <2>; /* ~100 kHz */
    #address-cells = <1>;
    #size-cells = <0>;
    pinctrl-names = "default";
    pinctrl-0 = <&i2c4_gpio>;
    status = "okay";
    
    gt9xx: gt9xx@14 {
        compatible = "goodix,gt9xx";
        reg = <0x14>;
        touch-gpio = <&gpio5 11 IRQ_TYPE_LEVEL_LOW>;
        reset-gpio = <&gpio5 10 GPIO_ACTIVE_HIGH>;
        max-x = <1200>;
        max-y = <1900>;
        tp-size = <911>;
        tp-supply = <&vcc_tp>;
        status = "okay";
      };
};

一般不推薦使用 GPIO,效率不高。

5. 檢查i2c設(shè)備

5.1 IIC 第三方工具

I2C tool 是一個開源工具,需自行下載進行交叉編譯,代碼下載地址:
https://www.kernel.org/pub/software/utils/i2c-tools/或者<git clone git://git.kernel.org/pub/scm/utils/i2c-tools/i2c-tools.git>
編譯后會生成 i2cdetect,i2cdump,i2cset,i2cget 等工具,可以直接在命令行上調(diào)試使用,I2C tool 是開源的,編譯與使用參考里面的 README 與幫助說明。

ArmSoM-W3板子對應(yīng)的出廠固件已經(jīng)在系統(tǒng)下集成了這個工具,可以直接使用,比如掃描I2C總線上的RTC設(shè)備:

root@linaro-alip:~# i2cdetect -y 6
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:                         -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- UU -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --                         
root@linaro-alip:~# 

掃描到對應(yīng)的RTC芯片的I2C地址為0X51

常用的命令還有以下幾個。

#檢測當前系統(tǒng)有幾組i2c總線
i2cdetect -l

#查看i2c-0接口上的設(shè)備
i2cdetect -a 6

#讀取指定設(shè)備的全部寄存器的值。
i2cdump  -f -y 6 0x51

#讀取指定IIC設(shè)備的某個寄存器的值,如下讀取地址為0x51器件中的0x01寄存器值。
i2cget -f -y 6 0x51 0x01

#寫入指定IIC設(shè)備的某個寄存器的值,如下設(shè)置地址為0x51器件中的0x01寄存器值為0x1a;
i2cset -f -y 3 0x51 0x01 0x1a

5.2 RTC使用

Linux系統(tǒng)下包含兩個時間:系統(tǒng)時間和RTC時間。

linux命令中的date和time等命令都是用來設(shè)置系統(tǒng)時間的,而hwclock命令是用來設(shè)置和讀寫RTC時間的。

root@linaro-alip:~# hwclock -r
2018-05-24 16:38:13.115443+00:00 //查看硬件時間
root@linaro-alip:~# date
2018年 05月 24日 星期四 16:38:21 UTC //查看系統(tǒng)時間
root@linaro-alip:~# date -s "2023-10-24 11:45:00" 
2023年 10月 24日 星期二 11:45:00 UTC //重新設(shè)置系統(tǒng)時間
root@linaro-alip:~# hwclock -w //同步系統(tǒng)時間到rtc上,掉電不丟失時間
root@linaro-alip:~# hwclock -r
2023-10-24 11:45:17.694727+00:00

5.3 I2C 常見問題

如果調(diào)用 I2C 傳輸接口返回值為 -6(-ENXIO)時候,表示為 NACK 錯誤,即對方設(shè)備無應(yīng)答響應(yīng)

ArmSom---I2C開發(fā)指南,RK3588從入門到精通,嵌入式硬件,linux,kernel,開源

這種情況一般為外設(shè)的問題,常見的有以下幾種情況:

  • I2C 地址錯誤;

  • I2C slave 設(shè)備處于不正常工作狀態(tài),比如沒有上電,錯誤的上電時序以及設(shè)備異常等;

  • I2C 時序不符合 slave 設(shè)備所要求也會產(chǎn)生 NACK 信號,比如 slave 設(shè)備需要的是 stop 信號,而不是

    repeat start 信號的時候;

  • I2C 總線受外部干擾導(dǎo)致的,用示波器測量可以看到是一個 ACK 波形。

當出現(xiàn) I2C 的 log 類似:"timeout, ipd: 0x80, state: 1"時,看到 ipd 為 0x80 打印,可以說明當前 SCL 被
slave 拉住,要判斷被哪個 slave 拉?。?br> 一是排除法,適用于外設(shè)不多的情況,而且復(fù)現(xiàn)概率高;
二是需要修改硬件,在 SCL 總線上串入電阻,通過電阻兩端產(chǎn)生的壓差來確定,電壓更低的那端
外設(shè)為拉低的 slave,電阻的選取以不影響 I2C 傳輸且可以看出壓差為標準,一般上拉電阻的 1/20
以上都可以,如果是 host 拉低也可以看出。
常見的情況是 sda 被拉低,證明是誰拉低的。

有時候i2c初始化有問題時速率可以降低看有沒有改善。遇到的 I2C 問題最好的辦法是抓取 I2C 出錯時候的波形,通過波形來分析 I2C 問
題,I2C 的波形非常有用,大部分的問題都能分析出來。

6. 讀取eeprom數(shù)據(jù)實驗

本章介紹通過IIC接口讀寫eeprom(AT24C08)的數(shù)據(jù)。 本次實驗會以i2c-7做為示例,接其他i2c引腳操作也是一樣的 當然,并不是只能用這個eeprom這個模組,這只是做個簡單的示例,如果您沒有這個模塊,可以通過學(xué)習(xí)操作eeprom的方式操作您想要操作的i2c設(shè)備。

6.1 硬件連接

將eeprom接入到ArmSoM-W3開發(fā)板的i2c-7的總線上,如下圖所示

ArmSom---I2C開發(fā)指南,RK3588從入門到精通,嵌入式硬件,linux,kernel,開源

板子 eeprom
3.3V(1) VCC
GND(39) GND
SCL(5) SCL
SDA(3) SCA

6.2 軟件配置

在文件kernel\arch\arm64\boot\dts\rockchip\rk3588-armsom-w3.dts文件下添加下面代碼:

&i2c7 {
	pinctrl-names = "default";
	pinctrl-0 = <&i2c7m3_xfer>;
	clock-frequency = <100000>;
	status = "okay";
	eeprom@50 {
                status = "okay";
				compatible = "at,24c08";
                reg = <0x50>;
        };
};

eeprom驅(qū)動在drivers/misc/eeprom/下面,如果是其他i2c接口芯片在kernel目錄下沒有驅(qū)動,可以去對找對應(yīng)芯片廠商提供驅(qū)動文件

ArmSom---I2C開發(fā)指南,RK3588從入門到精通,嵌入式硬件,linux,kernel,開源

將eeprom的驅(qū)動編譯進內(nèi)核測試

6.3 讀寫數(shù)據(jù)測試

找到模塊位置:

root@linaro-alip:~# find / -name "at24"
/sys/bus/i2c/drivers/at24

讀eeprom內(nèi)容:

ArmSom---I2C開發(fā)指南,RK3588從入門到精通,嵌入式硬件,linux,kernel,開源

寫eeprom內(nèi)容:

ArmSom---I2C開發(fā)指南,RK3588從入門到精通,嵌入式硬件,linux,kernel,開源文章來源地址http://www.zghlxwxcb.cn/news/detail-745631.html

到了這里,關(guān)于ArmSom---I2C開發(fā)指南的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • RK3568 android11 實現(xiàn)雙路I2C觸摸 --GT9xx

    RK3568 android11 實現(xiàn)雙路I2C觸摸 --GT9xx

    它的接口類型為 I2C ,供電電壓和通訊電壓均為 3.3V 。這款電容觸摸屏內(nèi)置了上拉電阻,這意味著我們的開發(fā)板上與該觸摸屏的接口處不需要設(shè)置上拉電阻。 關(guān)于線序,同樣是 GT911 ,不同批次的器件都有不同的線序。具體的要自行與廠家確認。 調(diào)試雙I2C觸摸,兩個tp是同一型

    2024年01月18日
    瀏覽(111)
  • ArmSom---SPI開發(fā)指南

    ArmSom---SPI開發(fā)指南

    RK3588從入門到精通 本?主要介紹在Rockchip平臺配置spi接口并且使用的方法 開發(fā)板:ArmSoM-W3 Kernel:5.10.160 OS:Debian11 SPI(Serial Peripheral Interface),即串行外圍設(shè)備接口,是一種同步的,全雙工的,多設(shè)備的,多主機的通信協(xié)議,用于連接外圍設(shè)備,如ADC、DAC、數(shù)據(jù)存儲器、定時

    2024年02月05日
    瀏覽(21)
  • ArmSom-W3開發(fā)板之PCIE的開發(fā)指南(一)

    ArmSom-W3開發(fā)板之PCIE的開發(fā)指南(一)

    RK3588從入門到精通 本?介紹RK平臺配置pcie的方法 開發(fā)板:ArmSoM-W3 PCIe(Peripheral Component Interconnect Express)是一種用于連接計算機內(nèi)部組件的高速接口標準。以下是關(guān)于PCIe接口的簡要介紹: 高速傳輸: PCIe接口提供了高速的數(shù)據(jù)傳輸通道,可用于連接各種硬件設(shè)備,如圖形卡、

    2024年02月04日
    瀏覽(22)
  • 【STM32】入門(七):I2C硬件控制方式

    【STM32】入門(七):I2C硬件控制方式

    之所以叫“I2C硬件控制方式”是與“軟件控制方式”相對。I2C軟件控制,就是寫程序直接操作兩個GPIO引腳,分別作為時鐘線SCL和數(shù)據(jù)線SDA,按照I2C協(xié)議的時序要求,操作GPIO輸入、輸出、高電平、低電平。 聽著就很復(fù)雜,好在STM32中有I2C的硬件實現(xiàn),即通過簡單的操作寄存器

    2023年04月08日
    瀏覽(27)
  • Linux驅(qū)動開發(fā)(I2C系統(tǒng)的重要結(jié)構(gòu)體)

    Linux驅(qū)動開發(fā)(I2C系統(tǒng)的重要結(jié)構(gòu)體)

    本篇文章來講解I2C系統(tǒng)的重要結(jié)構(gòu)體,了解這些結(jié)構(gòu)體對于編寫I2C驅(qū)動來說是至關(guān)重要的,所以要想編寫好一個I2C驅(qū)動程序那么就必須先了解這些結(jié)構(gòu)體。 這里使用百問網(wǎng)的一張圖片來講解: 一個芯片中可以有多個I2C控制器,并且一個I2C控制器可以控制多個設(shè)備。那么在對

    2024年02月07日
    瀏覽(27)
  • QEMU學(xué)習(xí)(五):I2C設(shè)備仿真及驅(qū)動開發(fā)

    QEMU學(xué)習(xí)(五):I2C設(shè)備仿真及驅(qū)動開發(fā)

    ????????I2C 是很常用的一個串行通信接口,用于連接各種外設(shè)、傳感器等器件, 本章我們來學(xué)習(xí)一下如何在QEMU里仿真I2C設(shè)備及 Linux 下開發(fā) I2C 接口器件驅(qū)動。 下面是標準的設(shè)備添加結(jié)構(gòu),我們使用的是常見的at_24c系列設(shè)備來做I2C的通信,詳細代碼請看qemuhwnvrameeprom_

    2024年02月08日
    瀏覽(211)
  • Linux驅(qū)動開發(fā)之i2c框架講解到例程

    Linux驅(qū)動開發(fā)之i2c框架講解到例程

    ? ? ? ? 本篇章在rk3399平臺上,基于設(shè)備樹的i2c驅(qū)動開發(fā)。i2c直接使用硬件i2c總線,體系結(jié)構(gòu)分為3部分:I2C 核心、I2C 總線驅(qū)動和I2C 設(shè)備驅(qū)動。 I2C 核心 (i2c-core.c)提供了I2C 總線驅(qū)動和設(shè)備驅(qū)動的注冊、注銷方法等。我們主要了解Linux中i2c的基本框架,分為 i2c主機驅(qū)動開發(fā)

    2024年02月02日
    瀏覽(22)
  • 【LabVIEW FPGA入門】使用CompactRIO進行SPI和I2C通信

    【LabVIEW FPGA入門】使用CompactRIO進行SPI和I2C通信

    ????????NI提供了?SPI and I2C Driver API:下載SPI and I2C Driver API - NI ? ? ? ? 該API使用FPGA數(shù)字I / O線與SPI或I2C設(shè)備進行通信。 ????????選擇數(shù)字硬件時,要考慮三個選項: NI Single-Board RIO硬件可同時使用SPI和I2C驅(qū)動程序。 NI 9401 C系列模塊與SPI驅(qū)動程序配合使用效果最佳。

    2024年02月02日
    瀏覽(17)
  • <Linux開發(fā)> linux開發(fā)工具-之-I2C TOOLS工具使用

    <Linux開發(fā)> linux開發(fā)工具-之-I2C TOOLS工具使用

    <Linux開發(fā)> linux開發(fā)工具-之-I2C TOOLS工具使用 <Android開發(fā)> Android開發(fā)工具- 之-I2C TOOLS工具使用 <Linux開發(fā)>驅(qū)動開發(fā) -之- Linux I2C 驅(qū)動 在筆者的另一篇文章 <Android開發(fā)> Android開發(fā)工具- 之-I2C TOOLS工具使用講解過,如何在android上使用I2C TOOLS工具。本文主要是分析如何在

    2024年02月16日
    瀏覽(25)
  • Clion開發(fā)STM32之HAL庫I2C封裝(基礎(chǔ)庫)

    引用參考: Clion開發(fā)STM32之HAL庫GPIO宏定義封裝(最新版)

    2024年02月13日
    瀏覽(52)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包