AIO-PX30JD4 開發板上的 AD 接口有兩種,分別為:溫度傳感器 (Temperature Sensor)、逐次逼近ADC (Successive Approximation Register)。其中:
-
TS-ADC(Temperature Sensor):支持兩通道,時鐘頻率必須低于800KHZ
-
SAR-ADC(Successive Approximation Register):支持三通道單端10位的SAR-ADC,時鐘頻率必須小于13MHZ。
Linux內核采用工業 I/O 子系統(iio子系統)來控制 ADC,該子系統主要為 AD 轉換或者 DA 轉換而設計。本文以配置SAR-ADC為例,主要介紹 SAR-ADC的基本配置和使用的方法,其相關的數據結構,源碼路徑以及配置步驟如下:
iio_channel結構體
iio_dev結構體
該結構體主要是用于描述IO口所屬的設備,其具體定義如下:
iio_chan_spec結構體
該結構體主要用于描述單個通道的屬性,具體定義如下:
配置DTS節點
第一步:在AIO-PX30JD4的 DTS 文件:kernel/arch/arm64/boot/dts/rockchip/px30.dtsi中,添加saradc資源,應如下:
第二步:根據用戶的通道需要選擇對應的saradc通道,本次例程使用AIO-PX30-JD4上的ADC按鍵檢測,選擇通道2,配置如下:
-
io-channels 屬性 為 選擇的通道號,這里選擇通道2
-
io-channel-names 屬性 表示 為申請的通道起一個別名。
-
keyup-threshold-microvolt 屬性 表示按鍵抬起,saradc通道2的電壓(單位微伏)。
-
press-threshold-microvolt 屬性 表示按鍵按下,saradc通道2的電壓。
-
vol-up-key 在硬件連接上,為AIO-PX30-JD4 上的recovery 按鍵。
-
linux,code 屬性 為 按鍵上報的鍵值,鍵值對應的動作 為 “音量+” 。
在saradc驅動文件中匹配 saradc 的dts 節點
第一步: 在內核設備樹添加saradc資源之后,可以在源碼kernel/drivers/iio/adc/rockchip_saradc.c中添加對應的saradc數據結構體
第二步: 在rockchip_saradc_match[] 中,添加px30的compatible屬性,使得saradc驅動可以匹配到saradc設備。因如下:
第三步: 填充saradc的platform_driver結構體:
第四步:通過module_platform_driver(rockchip_saradc_driver)宏平進行驅動的注冊。
在設備上電的時候,內核會解析內核設備樹,當檢測到設備樹上saradc的compatible屬性與saradc驅動的of_device_id中的compatible成員一致的時候,便會調用rockchip_saradc.c中的rockchip_saradc_probe()函數來進行iio系統的adc設備的資源申請以及初始化(此處不再贅述,用戶可自行查看源碼)。
在進入系統后,會出現一個 /sys/bus/iio/devices/iio:device0的目錄,表示創建成功。
在adc-keys.c驅動文件中匹配 adc-keys的dts 節點
第一步: 填充ADC按鍵驅動的adc_keys_of_match[]中的compatible成員用于匹配設備
第二步: 填充驅動結構體
第三步: 使用module_platform_driver(adc_keys_driver);往內核注冊該驅動。
第四步: 設備樹 compatible匹配正確,驅動注冊成功之后,便會調用ADC按鍵驅動的adc_keys_probe()函數,進行輸入子系統設備的注冊(因為是按鍵驅動,所以使用輸入子系統,此部分不在此講述)與saradc的io通道的申請。
在進入系統后,通過 getevent 命令 :
其中我們可以看到:
這樣表示我們的設備已經創建成功。
按鍵檢測
adc-keys.c驅動是通過輸入子系統的輪詢檢測函數adc_keys_poll(),來不斷地讀取saradc通道的值,當不同按鍵按下的時候,是有不同的電壓值的:
所以當recovery按鍵按下的時候,通過iio_read_channel_processed()函數獲取到的電壓值如果與設備樹配置相符合的話,就會觸發按鍵上報事件,而用戶層會收到事件,從屏幕可以看到有 ”音量+“ 的動作。
獲取所有ADC值
有個便捷的方法可以在命令行中直接查詢到每個SARADC的值:
其中in_voltage0_raw為通道0,in_voltage01_raw為通道1,以此類推。
以上面的例子為例,命令行輸入 cat /sys/bus/iio/devices/iio:device0/in_voltage2_raw 來獲取ADC電壓轉換后的數字量
獲取 AD 通道
注:iio_channel_get 通過 probe 函數傳進來的參數 pdev 獲取 IIO 通道結構體,probe 函數如下:
讀取 AD 采集到的原始數據
調用 iio_read_channel_raw 函數讀取 AD 采集的原始數據并存入 val 中。
計算采集到的電壓
使用標準電壓將 AD 轉換的值轉換為用戶所需要的電壓值。其計算公式如下:
注:
-
Vref 為標準電壓
-
n 為 AD 轉換的位數
-
Vresult 為用戶所需要的采集電壓
-
raw 為 AD 采集的原始數據
例如,標準電壓為 1.8V,AD 采集位數為 10 位,AD 采集到的原始數據為 568,則:
-
功能:獲取 iio 通道描述
-
參數:
-
dev: 使用該通道的設備描述指針
-
consumer_channel: 該設備所使用的 IIO 通道描述指針
-
-
功能:釋放 iio_channel_get 函數獲取到的通道
-
參數:
-
chan:要被釋放的通道描述指針
-
-
功能:讀取 chan 通道 AD 采集的原始數據。
-
參數:
-
chan:要讀取的采集通道指針
-
val:存放讀取結果的指針
-
為何按上面的步驟申請SARADC,會出現申請報錯的情況?
驅動需要獲取ADC通道來使用時,需要對驅動的加載時間進行控制,必須要在saradc初始化之后。saradc是使用module_platform_driver()進行平臺設備驅動注冊,最終調用的是module_init()。所以用戶的驅動加載函數只需使用比module_init()優先級低的,例如:late_initcall(),就能保證驅動的加載的時間比saradc初始化時間晚,可避免出錯。
GPIO, 全稱 General-Purpose Input/Output(通用輸入輸出),是一種軟件運行期間能夠動態配置和控制的通用引腳。 PX30有4組GPIO bank:GPIO0~GPIO3,每組又以 A0~A7, B0~B7, C0~C7, D0~D7 作為編號區分(GPIO0在PD_PMU子系統中,GPIO1/GPIO2/GPIO3在PD_BUS子系統中)。 所有的GPIO在上電后的初始狀態都是輸入模式,可以通過軟件設為上拉或下拉,也可以設置為中斷腳,驅動強度都是可編程的。每個 GPIO 口除了通用輸入輸出功能外,還可能有其它復用功能,例如:
每個 GPIO 口的驅動電流、上下拉和重置后的初始狀態都不盡相同,詳細情況請參考《px30 規格書》中的 “Chapter 21 GPIO” 一章。 px30 的 GPIO 驅動是在以下 pinctrl 文件中實現的:
其核心是填充 GPIO bank 的方法和參數,并調用 gpiochip_add 注冊到內核中。
DTS配置
本文以px30的gslx680外設(基于i2c通信的觸摸屏)為例,講述 gpio的輸入輸出,中斷,復用功能的使用,該驅動源碼在SDK的路徑為:
以下就以該驅動為例介紹GPIO的操作。
本例子所需添加的DTS資源如下所示:
輸入輸出引腳配置
這里使用的是gslx680外設的reset(復位)引腳來講述GPIO的輸入輸出操作。 在DTS配置如下資源:
AIO-PX30JD4的dts對引腳的描述與Firefly-RK3288有所區別,GPIO0_B4被描述為:<&gpio0 12 GPIO_ACTIVE_HIGH>,這里的12來源于:8+4=12,其中8是因為GPIO0_B4是屬于GPIO0的B組,如果是A組的話則為0,如果是C組則為16,如果是D組則為24,以此遞推,而4是因為B4后面的4。GPIO_ACTIVE_HIGH表示高電平有效,如果想要低電平有效,可以改為:GPIO_ACTIVE_LOW,這個屬性將被驅動所讀取。
中斷引腳配置
這里使用的是gslx680外設的irq(中斷) 引腳來講述GPIO的中斷功能 在DTS中配置如下資源:
其中 gpio0 5 的意思是使用gpio0_A5 為中斷引腳,IRQ_TYPE_LEVEL_LOW意思是該引腳低電平(下降沿)的時候觸發中斷,跳到中斷函數執行,中斷的觸發類型還可以配置如下:
復用功能引腳配置
查看芯片的數據手冊,可以知道:
在上面i2c1的dts的配置中,主要有以下關鍵的描述
-
pinctrl-names 定義了狀態名稱列表: default (i2c 功能) 和 gpio 兩種狀態。
-
pinctrl-0 定義了狀態 0 (即 default)時需要設置的 pinctrl: &i2c4_xfer
-
pinctrl-1 定義了狀態 1 (即 gpio)時需要設置的 pinctrl: &i2c4_gpio
由于在i2c1的dts上gpio的字段屬性沒有添加,所以默認該兩個引腳設置為i2c復用功能,其中pinctrl的描述可以在kernel/arch/arm64/boot/dts/rockchip/px30.dtsi 找到 :
其中 0 RK_PC2 表示的是GPIO0_C2引腳,0 RK_PC3 表示的是 GPIO0_C3引腳
RK_FUNC_1,RK_FUNC_GPIO的定義在 kernel/include/dt-bindings/pinctrl/rockchip.h 中可以找到:
在復用時,如果選擇了 “default” (即 i2c 功能),系統會應用 i2c1_xfer 這個 pinctrl,最終將 GPIO0_C2 和 GPIO0_C3 兩個針腳切換成對應的 i2c 功能;而如果選擇了 “gpio” ,系統會應用 i2c1_gpio 這個 pinctrl,將 GPIO0_C2 和 GPIO0_C3 兩個針腳還原為 GPIO 功能。
由于px30的i2c都是默認復用的,所以在源SDK的px30.dtsi中并沒有加上gpio的選擇,所以,在i2c總線驅動中:kernel/drivers/i2c/busses/i2c-rk3x.c,并沒有加上切換復用功能的源碼
如需了解i2c總線驅動是如何切換復用功能的,可以參考源碼SDK中的rockchip的官方例子:kernel/drivers/i2c/busses/i2c-rockchip.c 中的rockchip_i2c_probe()函數。
首先是調用 of_get_gpio 取出設備樹中 i2c1 結點的 gpios 屬于所定義的兩個 gpio:
然后是調用 devm_gpio_request 來申請 gpio,接著是調用 pinctrl_lookup_state 來查找 “gpio” 狀態,而默認狀態 “default” 已經由框架保存到 i2c->dev-pins->default_state 中了。最后調用 pinctrl_select_state 來選擇是 “default” 還是 “gpio” 功能。
下面是常用的GPIO復用 API的定義:
gslx680 驅動解析之輸入輸出,中斷
以下是對px30源SDK中gslx680外設驅動中gsl_ts_probe()函數,gslX680_init()函數,static irqreturn_t gsl_ts_irq()進行部分的解析,用戶可以從中了解gpio的輸入輸出,中斷功能的使用,而用于復用功能的i2c通信,則在下一章i2c進行講解。
-
of_get_named_gpio_flags 從設備樹中讀取 “reset-gpio” 和 “touch-gpio” 的 GPIO 配置編號和標志,gpio_is_valid 判斷該 GPIO 編號是否有效,devm_gpio_request_one則申請占用該 GPIO。如果初始化過程出錯,會跳到dev_err()函數進行報錯與gpio資源釋放處理。
-
調用gpio_to_irq把GPIO的PIN值轉換為相應的IRQ值,調用devm_request_threaded_irq申請中斷,如果失敗會goto到標簽error_req_irq_fail進行錯誤處理,gpio資源的釋放,該函數中ts->irq是要申請的硬件中斷號,gsl_ts_irq是中斷函數,irq_flags | IRQF_ONESHOT是中斷標志位, client->name是設備驅動程序名稱,ts是該設備的device結構體,在注冊共享中斷時會用到。
在gsl_ts_probe()中,會在上電的時候,對復位引腳以及中斷引腳進行初始化操作:
由上面的步驟可知曉,在設備上電的時候,可以用示波器測試出,該reset引腳會出現一個復位的操作。
而對于中斷而言,在用戶在進入系統之后,點擊觸摸屏,會把中斷引腳拉低,由上面的devm_request_threaded_irq()函數可知,該中斷在觸發的時候,會跳到static irqreturn_t gsl_ts_irq()中斷函數中去執行:
上面這個中斷函數主要是做了一些鍵值的上報,由于本文未涉及input輸入子系統,所以不在此處講述。
下面是常用的 GPIO 輸入輸出的API 定義:
IO指令
GPIO調試有一個很好用的工具,那就是IO指令,Android系統默認已經內置了IO指令,使用IO指令可以實時讀取或寫入每個IO口的狀態,這里簡單介紹IO指令的使用。 首先查看 io 指令的幫助:
從幫助上可以看出,如果要讀或者寫一個寄存器,可以用:
使用示例:
-
查看GPIO0當前各引腳值的情況
-
從主控的datasheet查到GPIO0_IOMUX對應寄存器基地址為:FF040000
-
如果想改變GPIO的配置值,可以使用以下指令設置:
GPIO調試接口
Debugfs文件系統目的是為開發人員提供更多內核數據,方便調試。 這里GPIO的調試也可以用Debugfs文件系統,獲得更多的內核信息。 GPIO在Debugfs文件系統中的接口為 /sys/kernel/debug/gpio,可以這樣讀取該接口的信息:
從讀取到的信息中可以知道,內核把GPIO當前的狀態都列出來了,以GPIO0組為例,gpio-5(GPIO0_A5)作為gslX680 模塊的中斷引腳,設置輸入,輸出高電平。
Q1: 如何將PIN的MUX值切換為一般的GPIO?
A1: 當使用GPIO request時候,會將該PIN的MUX值強制切換為GPIO,所以使用該pin腳為GPIO功能的時候確保該pin腳沒有被其他模塊所使用。
Q2: 為什么我用IO指令讀出來的值都是0x00000000?
A2: 如果用IO命令讀某個GPIO的寄存器,讀出來的值異常,如 0x00000000或0xffffffff等,請確認該GPIO的CLK是不是被關了,GPIO的CLK是由CRU控制,可以通過讀取datasheet下面CRU_CLKGATE_CON* 寄存器來查到CLK是否開啟,如果沒有開啟可以用io命令設置對應的寄存器,從而打開對應的CLK,打開CLK之后應該就可以讀到正確的寄存器值了。
Q3: 測量到PIN腳的電壓不對應該怎么查?
A3: 測量該PIN腳的電壓不對時,如果排除了外部因素,可以確認下該pin所在的io電壓源是否正確,以及IO-Domain配置是否正確。
Q4: gpio_set_value()與gpio_direction_output()有什么區別?
A4: 如果使用該GPIO時,不會動態的切換輸入輸出,建議在開始時就設置好GPIO 輸出方向,后面拉高拉低時使用gpio_set_value()接口,而不建議使用gpio_direction_output(), 因為gpio_direction_output接口里面有mutex鎖,對中斷上下文調用會有錯誤異常,且相比 gpio_set_value,gpio_direction_output 所做事情更多,浪費。
AIO-PX30-JD4 開發板上有 4 個片上 I2C 控制器,各個 I2C 的使用情況如下表:
本文主要描述如何在該開發板上配置 I2C。
配置 I2C 可分為兩大步驟:
-
定義和注冊 I2C 設備
-
定義和注冊 I2C 驅動
下面以配置 GSL3680 (觸摸屏)為例。
在注冊I2C設備時,需要結構體 i2c_client 來描述 I2C 設備。然而在標準Linux中,用戶只需要提供相應的 I2C 設備信息,Linux就會根據所提供的信息構造 i2c_client 結構體。
用戶所提供的 I2C 設備信息以節點的形式寫到 dts 文件中,路徑為 kernel/arch/arm64/boot/dts/rockchip/px30-firefly-aiojd4-lvds.dts ,如下所示:
該驅動的路徑為:kernel/drivers/input/touchscreen/gslx680_firefly.c
定義 I2C 驅動
在定義 I2C 驅動之前,用戶首先要定義變量 of_device_id 和 i2c_device_id 。
of_device_id 用于在驅動中調用dts文件中定義的設備信息,其定義如下所示:
定義變量 i2c_device_id:
i2c_driver 如下所示:
注:變量id_table指示該驅動所支持的設備。
注冊 I2C 驅動
使用i2c_add_driver函數注冊 I2C 驅動。
在調用 i2c_add_driver 注冊 I2C 驅動時,會遍歷 I2C 設備,如果該驅動支持所遍歷到的設備(即id_table的值與設備樹的compatible屬性值相同),則會調用該驅動的 probe 函數。
通過 I2C 收發數據
在注冊好 I2C 驅動后,即可進行 I2C 通訊。
在該驅動的gsl_ts_probe()函數中,會對gslx680的IC進行初始化,而在初始化的代碼中,會對主從設備的通訊進行一個測試
而在 test_i2c()這個函數中,會存在gsl_ts_read(),gsl_ts_write()兩個gslx680驅動自己封裝的主機發送和主機接受函數,其內部真正調用的是Linux內核提供的I2C通訊函數。
-
向從機發送信息:
-
向從機讀取信息:
在使用i2c_master_xxx()函數來進行接受或者發送的時候,也是調用i2c_transfer()這個函數來處理一個消息結構體(i2c_msg),而對于一些處理信息比較復雜的I2C設備,可以直接調用i2c_transfer()來處理信息,不過要自己構造 i2c_msg 結構體。
Q1: 通信失敗,出現這種log:”timeout, ipd: 0x00, state: 1”該如何調試?
A1: 請檢查硬件上拉是否給電。
Q2: 調用i2c_transfer返回值為-6?
A2: 返回值為-6表示為NACK錯誤,即對方設備無應答響應,這種情況一般為外設的問題,常見的有以下幾種情況:
-
I2C地址錯誤,解決方法是測量I2C波形,確認是否I2C 設備地址錯誤;
-
I2C slave 設備不處于正常工作狀態,比如未給電,錯誤的上電時序等;
-
時序不符合 I2C slave設備所要求也會產生Nack信號。
Q3: 當外設對于讀時序要求中間是stop信號不是repeat start信號的時候,該如何處理?
A3: 這時需要調用兩次i2c_transfer, I2C read 拆分成兩次,修改如下:
AIO-PX30-JD4 開發板上使用紅外收發傳感器 IR (麥克風和i2c0之間)實現遙控功能,在IR接口處接上紅外接收器。本文主要描述在開發板上如何配置紅外遙控器。
其配置步驟可分為兩個部分:
-
修改內核驅動:內核空間修改,Linux 和 Android 都要修改這部分的內容。
-
修改鍵值映射:用戶空間修改(僅限 Android 系統)。
在PX30的DTS文件 : kernel/arch/arm64/boot/dts/rockchip/px30-firefly-aiojd4-lvds.dts 中:
注1:第一列為鍵值,第二列為要響應的按鍵碼。 注2:由于UART3的RX與IR復用了,所以要使用IR功能,就需要在設備樹上關閉UART3。
在 Linux 內核中,IR 驅動僅支持 NEC 編碼格式。以下是在內核中配置紅外遙控的方法。
所涉及到的文件
如何獲取用戶碼和IR 鍵值
在 remotectl_do_something 函數中獲取用戶碼和鍵值:
注:用戶可以使用 DBG_CODE() 函數打印用戶碼。
使用下面命令可以使能DBG_CODE打印:
將 IR 驅動編譯進內核
將 IR 驅動編譯進內核的步驟如下所示:
(1)、向配置文件 drivers/input/remotectl/Kconfig 中添加如下配置:
(2)、修改 drivers/input/remotectl 路徑下的 Makefile,添加如下編譯選項:
(3)、在 kernel 路徑下使用 make menuconfig ,按照如下方法將IR驅動選中。
保存后,執行 make 命令即可將該驅動編進內核。
文件 /system/usr/keylayout/ff200030_pwm.kl 用于將 Linux 層獲取的鍵值映射到 Android 上對應的鍵值。用戶可以添加或者修改該文件的內容以實現不同的鍵值映射。
該文件內容如下所示:
注:通過 adb 修改該文件重啟后即可生效。
下圖是當紅外遙控器按鈕按下的時候,所產生的波形,主要由head,Control,information,signed free這四部分組成,具體可以參考RC6 Protocol。
AIO-PX30-JD4開發板默認外置支持了一個LCD屏接口,為LVDS,另外板子也支持MIPI屏幕,但需要注意的是MIPI和LVDS是復用的,使用LVDS之后不能使用MIPI,接口如下圖:
由于AIO-PX30-JD4默認使用的是LVDS屏幕,同時在默認的配置文件kernel/arch/arm64/configs/firefly_defconfig已經把LCD相關的配置設置好了,如果自己做了修改,請注意把以下配置加上:
DSI_PHY配置
AIO-PX30-JD4中關于LVDS(MIPI) DSI_PHY的DTS配置在:kernel/arch/arm64/boot/dts/rockchip/px30.dtsi中,從該文件我們可以看到:
而在kernel/arch/arm64/boot/dts/rockchip/px30-firefly-aiojd4-lvds.dts 也存在對以上dts進行引用配置
Backlight配置
AIO-PX30-JD4開發板外置了一個背光接口用來控制屏幕背光,如下圖所示:
主要有背光電源引腳以及控制亮度引腳,DTS:kernel/arch/arm64/boot/dts/rockchip/px30-firefly-aiojd4-lvds.dts配置如下
-
enable-gpios 屬性為背光的電源控制引腳。
-
pwms屬性:配置PWM,可用來改變輸出占空比(范例里面默認使用pwm0,50000ns是周期(20 KHz)。
-
brightness-levels屬性:配置背光亮度數組,最大值為255,配置暗區和亮區,并把亮區數組做255的比例調節。比如范例中暗區是255-221,亮區是220-0。 由于PX30使用200以上的level屏幕就會過暗,所以默認最大值為200。
-
default-brightness-level屬性:開機時默認背光亮度,范圍為0-255。
具體請參考kernel中的說明文檔:kernel/Documentation/devicetree/bindings/leds/backlight/pwm-backlight.txt
顯示時序配置
在kernel/arch/arm64/boot/dts/rockchip/px30-firefly-aiojd4-lvds.dts中可以看到以下語句:
時序屬性參考下圖:
lvds屏上完電后需要完成一些初始化的工作才可以工作。
u-boot 部分 ->u-boot/drivers/video/drm/rockchip-dw-mipi-dsi.c
詳細流程說明可參考以下附件: Rockchip DRM Panel Porting Guide.pdf
AIO-PX30-JD4 開發板上有 2 個 LED 燈,如下表所示:
以設備的方式控制 LED可通過使用 LED 設備子系統或者直接操作 GPIO 控制該 LED。
標準的 Linux 專門為 LED 設備定義了 LED 子系統。 在 AIO-PX30-JD4 開發板中的兩個 LED 均以設備的形式被定義。
用戶可以通過 /sys/class/leds/ 目錄控制這兩個 LED。
開發板上的 LED 的默認狀態為:
-
Blue: 系統上電時打開
-
Yellow:用戶自定義
用戶可以通過 echo 向其 brightness屬性輸入命令控制每一個 LED:
Trigger 包含多種方式可以控制LED,這里就用兩個例子來說明
-
Simple trigger LED
-
Complex trigger LED
更詳細的說明請參考 kernel/Documentation/leds/leds-class.txt ,有內核對LED相關功能的支持的描述。
首先我們需要知道定義多少個LED,同時對應的LED的屬性是什么。
在 kernel/arch/arm64/boot/dts/rockchip/px30-firefly-aiojd4-lvds.dts 文件中定義LED節點,具體定義如下:
注意:compatible 的值要跟 drivers/leds/leds-gpio.c 中的 .compatible 的值要保持一致。
Simple trigger LED
這是使用簡單的觸發方式控制來LED,如下就默認打開黃燈:
(1)定義 LED 觸發器 在kernel/drivers/leds/trigger/led-firefly-demo.c 文件中有如下添加
(2)注冊該觸發器
(3)控制 LED 的亮。
(4)打開LED demo
led-firefly-demo默認沒有打開,如果需要的話可以使用以下補丁打開demo驅動:
Complex trigger LED
如下是trigger方式控制LED復雜一點的例子,timer trigger 就是讓LED達到不斷亮滅的效果
我們需要在內核把timer trigger配置上
在 kernel 路徑下使用 make menuconfig ,按照如下方法將timer trigger驅動選中。
保存配置并編譯內核,把kernel.img 燒到AIO-PX30-JD4板子上 我們可以使用串口輸入命令,就可以看到藍燈不停的間隔閃爍
用戶還可以使用 cat 命令獲取 trigger 的可用值:
AIO-PX30-JD4 開發板帶有一個MIPI camera,為MIPI_CSI,MIPI最高支持 3264x2448 pixels拍照。
本文以 OV13850 攝像頭為例,講解在該開發板上的配置過程。
kernel/arch/arm64/boot/dts/rockchip/px30.dtsi:
與攝像頭相關的代碼目錄如下:
設置攝像頭相關的引腳和時鐘,即可完成配置過程。
從以下攝像頭接口原理圖可知,需要配置的引腳有:CIF_PWR、DVP_PWR和MIPI_RST。
-
mipi接口
-
DVP_PWR 對應 PX30 的 GPIO1_B7;
-
CIF_PWR 對應 PX30 的 GPIO1_B6;
-
MIPI_RST對應 PX30 的 GPIO2_B3;
在開發板中,這三個引腳都是在 cam_board_rk3326.xml 中設置。
配置 Android
修改hardware/rockchip/camera/Config/cam_board_rk3326.xml 來注冊攝像頭:
-
嵌入式主板
+關注
關注
7文章
6085瀏覽量
35395 -
安卓
+關注
關注
5文章
2132瀏覽量
57259 -
Firefly
+關注
關注
2文章
538瀏覽量
7058
發布評論請先 登錄
相關推薦
評論