chinese直男口爆体育生外卖, 99久久er热在这里只有精品99, 又色又爽又黄18禁美女裸身无遮挡, gogogo高清免费观看日本电视,私密按摩师高清版在线,人妻视频毛茸茸,91论坛 兴趣闲谈,欧美 亚洲 精品 8区,国产精品久久久久精品免费

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

在U-Boot中為RK3588添加SARADC檢測:從零到一的硬件識別方案

jf_44130326 ? 來源:Linux1024 ? 2026-02-05 13:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

嵌入式開發(fā)中,我們經(jīng)常需要在系統(tǒng)啟動的早期階段(U-Boot)識別硬件版本或配置。本文將詳細(xì)介紹如何在U-Boot中為RK3588平臺添加SARADCSuccessive Approximation Register Analog-to-Digital Converter)檢測功能,通過讀取ADC電壓值來區(qū)分不同的硬件版本,并將結(jié)果存入環(huán)境變量,為后續(xù)的啟動流程提供依據(jù)。

wKgZO2kajESAKafNAAP3aQqbeVc822.png

核心思路與應(yīng)用場景

為什么需要在U-Boot中做ADC檢測?

U-Boot作為引導(dǎo)加載程序,運(yùn)行在操作系統(tǒng)內(nèi)核之前,擁有極高的硬件訪問權(quán)限。在這個階段進(jìn)行ADC檢測,可以實(shí)現(xiàn):

?硬件版本自動識別:通過讀取主板上由電阻分壓網(wǎng)絡(luò)決定的ADC引腳電壓,U-Boot可以判斷出當(dāng)前硬件的具體型號或版本。

?動態(tài)配置加載:根據(jù)識別出的硬件版本,U-Boot可以加載不同的設(shè)備樹(Device Tree)、啟動參數(shù)或執(zhí)行特定的初始化腳本,實(shí)現(xiàn)一鏡像適配多硬件的目標(biāo)。

?故障診斷:檢測關(guān)鍵電源電壓或傳感器狀態(tài),在啟動早期發(fā)現(xiàn)硬件異常。

第一步:配置SARADC設(shè)備樹(DTS)

要在U-Boot中使用SARADC,首先需要確保其設(shè)備樹節(jié)點(diǎn)已正確配置并啟用。

文件路徑:u-boot/arch/arm/dts/rk3588-u-boot.dtsi

/* 在 rk3588-u-boot.dtsi 文件中找到并確認(rèn) saradc 節(jié)點(diǎn) */&saradc { /*  * u-boot, dm-pre-reloc; 是一個關(guān)鍵屬性,  * 它告訴 U-Boot 的驅(qū)動模型(Driver Model)  * 在 relocation(重定位)之前就初始化這個設(shè)備。  * 因?yàn)槲覀円?board_init_f 階段(重定位前)讀取ADC,  * 所以必須添加此屬性。  */  u-boot, dm-pre-reloc;  status ="okay";};

代碼解讀:

?&saradc:引用主設(shè)備樹中定義的saradc節(jié)點(diǎn)。

?u-boot, dm-pre-reloc;:核心配置。確保SARADC驅(qū)動在U-Boot早期階段(內(nèi)存重定位前)就被初始化,這樣我們才能在board_init_fboard_init_r中調(diào)用其功能。

?status = "okay";:啟用這個設(shè)備節(jié)點(diǎn)。

第二步:編寫ADC檢測邏輯

接下來,我們在板級初始化文件中添加實(shí)際的檢測代碼。

文件路徑:u-boot/arch/arm/mach-rockchip/board.c

/* 在 board.c 文件的合適位置(如 board_init_r 函數(shù)之前)添加此函數(shù) */voidsbc_id_detection(void){ /* 1. 定義變量 */ intclosest_level =7;// 默認(rèn)的最高等級 unsignedintadc_value;// 存儲原始ADC讀數(shù) (0-4095 for 12-bit) unsignedintvoltage_mv;// 轉(zhuǎn)換后的電壓值 (mV) /* 2. 定義電壓區(qū)間與硬件版本的對應(yīng)關(guān)系 */ /* 這是一個典型的電阻分壓網(wǎng)絡(luò)設(shè)計,不同的電阻組合產(chǎn)生不同的電壓。   你需要根據(jù)自己的硬件原理圖來修改這兩個數(shù)組中的值。 */ constintmin_mv[] = {1640,1430,1220,1000,790, 560, 350, 0}; constintmax_mv[] = {1840,1630,1420,1200,990, 770, 550,250}; /* 3. 讀取ADC通道3的值 */ /* "saradc" 是設(shè)備樹中的節(jié)點(diǎn)名,3 是要讀取的通道號 */ if(adc_channel_single_shot("saradc",3, &adc_value) ==0) {   /* 4. 將ADC原始值轉(zhuǎn)換為電壓值 (mV) */   /*     計算公式:Vout = Vin * (ADC_Value / 2^n)     - Vin (參考電壓) = 1800 mV (根據(jù)瑞芯微文檔)     - n (ADC位數(shù)) = 12 bits, 所以 2^12 = 4096    */    voltage_mv = (adc_value *1800) /4095;   /* 5. 根據(jù)電壓值查找匹配的硬件等級 */   for(inti =0; i 8; i++) {     if(voltage_mv >= min_mv[i] && voltage_mv <= max_mv[i]) {        closest_level = i;       break;// 找到后立即跳出循環(huán)      }    }   /* 6. 將檢測結(jié)果存入U-Boot環(huán)境變量 */   /* 環(huán)境變量 SBCID 可以在后續(xù)的啟動腳本中被讀取和使用 */   env_set_ulong("SBCID", closest_level);      /* 調(diào)試信息,可以在串口終端看到 */   printf("SARADC: Voltage detected: %d mV, SBCID set to %dn", voltage_mv, closest_level);  }else{   /* 7. 處理ADC讀取失敗的情況 */   env_set("SBCID","unknown");   printf("SARADC: Failed to read from channel 3. SBCID set to 'unknown'n");  }}/** 將檢測函數(shù)注冊到U-Boot的初始化序列中。* board_init_r 是一個合適的位置,它在設(shè)備初始化完成后、* 環(huán)境變量初始化后、啟動倒計時開始前執(zhí)行。*/// 注意:具體的注冊方式可能因U-Boot版本而異,// 請查閱你所用U-Boot版本的板級文件,找到合適的位置調(diào)用 sbc_id_detection();// 例如,在 board_r.c 的某個初始化函數(shù)中添加:// sbc_id_detection();

代碼解讀:

1.adc_channel_single_shot(): U-Boot提供的便捷API,用于單次讀取指定ADC設(shè)備和通道的值。

2.電壓換算:根據(jù)瑞芯微手冊,SARADC的參考電壓Vref1.8V1800mV)。代碼將12位的ADC讀數(shù)(范圍0-4095)線性換算為實(shí)際電壓。

3.等級匹配:通過for循環(huán)將計算出的電壓值與預(yù)設(shè)的min_mvmax_mv數(shù)組進(jìn)行比較,找到對應(yīng)的硬件等級closest_level。

4.環(huán)境變量:env_set_ulong()將檢測到的等級存入名為SBCID的環(huán)境變量。這個變量非常關(guān)鍵,后續(xù)的啟動腳本(如boot.cmd)就可以通過判斷SBCID的值來執(zhí)行不同的操作。

第三步:如何使用檢測結(jié)果(參考)

檢測結(jié)果SBCID已存入環(huán)境變量,現(xiàn)在你可以在U-Boot的啟動腳本中靈活運(yùn)用它。

文件路徑:u-boot/board/rockchip/your_board/your_board.env(或類似的腳本文件)

# 在 U-Boot 啟動腳本中,可以這樣使用 SBCIDiftest${SBCID}-eq 0;then echo"Detected Board Version A. Loading corresponding Device Tree..."  setenv fdtfile rockchip/rk3588-board-version-a.dtbeliftest${SBCID}-eq 1;then echo"Detected Board Version B. Loading corresponding Device Tree..."  setenv fdtfile rockchip/rk3588-board-version-b.dtbelse echo"Detected unknown board or using default configuration."  setenv fdtfile rockchip/rk3588-board-default.dtbfi# 后續(xù)的 bootcmd 會使用 $fdtfile 變量來加載正確的設(shè)備樹# run bootcmd

第四步:uboot 命令行中查看

bdinfo

關(guān)鍵要點(diǎn)與風(fēng)險預(yù)案

1.時序問題:確保ADC檢測函數(shù)在所有必要驅(qū)動初始化之后調(diào)用。board_init_r是一個安全的選擇。

2.硬件依賴:此方案完全依賴于硬件設(shè)計。分壓電阻的精度、焊接質(zhì)量、以及ADC引腳的電氣連接都會影響檢測結(jié)果。

3.區(qū)間設(shè)計:在設(shè)計min_mvmax_mv數(shù)組時,要考慮到電阻容差和ADC采樣誤差,為每個區(qū)間留出足夠的余量,避免電壓值落在區(qū)間邊界導(dǎo)致誤判。

4.調(diào)試:在開發(fā)階段,可以將printf語句打開,通過串口終端觀察ADC的原始值、換算后的電壓值以及最終的SBCID,這對于調(diào)試硬件和校準(zhǔn)區(qū)間非常有幫助。

下一步

?代碼集成:將上述代碼片段集成到您的U-Boot源碼樹中,并根據(jù)您的具體硬件原理圖,精確調(diào)整min_mvmax_mv數(shù)組的值。

?腳本優(yōu)化:完善您的U-Boot啟動腳本,利用SBCID環(huán)境變量實(shí)現(xiàn)更復(fù)雜的啟動邏輯,例如加載不同的內(nèi)核參數(shù)或根文件系統(tǒng)。

希望這篇文章能幫助您順利完成U-Boot中的ADC檢測功能開發(fā)。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5200

    文章

    20458

    瀏覽量

    334323
  • adc
    adc
    +關(guān)注

    關(guān)注

    100

    文章

    7513

    瀏覽量

    556089
  • u-boot
    +關(guān)注

    關(guān)注

    0

    文章

    135

    瀏覽量

    39798
  • RK3588
    +關(guān)注

    關(guān)注

    8

    文章

    556

    瀏覽量

    7350
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    Rockchip rk3588 U-Boot詳解()

    Linux內(nèi)核flash(NAND,NOR FLASH,SD,MMC 等)拷貝 DDR ,最后啟動 Linux 內(nèi)核。當(dāng)然了,bootloader 的實(shí)際工作要復(fù)雜的多,但是它最主要的工作就是啟動
    的頭像 發(fā)表于 06-13 09:08 ?6780次閱讀
    Rockchip <b class='flag-5'>rk3588</b> <b class='flag-5'>U-Boot</b>詳解(<b class='flag-5'>一</b>)

    Rockchip rk3588 U-Boot詳解 (二)

    Rockchip rk3588 U-Boot詳解 (二) 專欄總目錄 1.1 DM DM (Driver Model) 是 U-Boot 標(biāo)準(zhǔn)的 device-driver 開發(fā)模型,跟
    的頭像 發(fā)表于 06-13 10:49 ?4759次閱讀

    U-boot的基本介紹

    本文開始,將陸續(xù)推送“手把手教你移植U-boot”系列文章,目標(biāo)是由淺入深地講解U-boot的工作流程、原理、配置方法和移植方法,手把手教你完成U-boot的移植工作,默認(rèn)
    發(fā)表于 07-14 16:52 ?4194次閱讀
    <b class='flag-5'>U-boot</b>的基本介紹

    基于RK3588的NPU案例分享!6T是真的強(qiáng)!

    應(yīng)用 圖1目標(biāo)識別跟蹤:視頻監(jiān)控和無人駕駛領(lǐng)域,RK3588可提供6TOPS高性能NPU算力,可實(shí)時處理高清視頻流、目標(biāo)檢測、識別和跟蹤
    發(fā)表于 07-17 10:55

    基于迅RK3568/RK3588開發(fā)板的AI圖像識別方案

    https://www.bilibili.com/video/BV1G54y1A7nf/?spm_id_from=333.999.0.0 迅RK3568/RK3588開發(fā)板AI識別
    發(fā)表于 08-28 09:50

    如何在rk3588j上使用uboot命令行測試pwm驅(qū)動呢?

    我想在rk3588j上使用uboot命令行測試pwm驅(qū)動,u-boot/cmd/下添加了pwm.c,然后
    發(fā)表于 01-31 17:28

    RK3568/RK3588開發(fā)板人工智能AI攝像頭識別功能方案

    RK3568以及RK3588開發(fā)板內(nèi)置獨(dú)立NPU,RK3588運(yùn)算能力高達(dá)6TOPS,RK3568運(yùn)算能力高達(dá)16TOPS算力支撐,高性
    發(fā)表于 03-27 14:56

    u-boot簡介

    演化而來。其源碼目錄、編譯形式與Linux內(nèi)核很相似,事實(shí)上,不少U-Boot源碼就是根據(jù)相應(yīng)的Linux內(nèi)核源程序進(jìn)行簡化而形成的,尤其是些設(shè)備的驅(qū)動程序,這U-Boot源碼的注
    發(fā)表于 10-14 11:17 ?3958次閱讀

    rk3588是armv8嗎?rk3588硬件資料

    rk3588是armv8嗎?rk3588 硬件資料 RK3588款高性能處理器,是Rockchip公司推出的最新芯片。本文將詳細(xì)介紹
    的頭像 發(fā)表于 08-21 17:32 ?6016次閱讀

    電子RK3588S與RK3588硬件性能區(qū)別及板卡選型

    電子RK3588S與RK3588硬件性能區(qū)別及板卡選型
    的頭像 發(fā)表于 06-25 15:30 ?6342次閱讀
    迅<b class='flag-5'>為</b>電子<b class='flag-5'>RK3588</b>S與<b class='flag-5'>RK3588</b><b class='flag-5'>硬件</b>性能區(qū)別及板卡選型

    RK3588!黑神話悟空,啟動?-迅電子RK3588開發(fā)板

    RK3588!黑神話悟空,啟動?-迅電子RK3588開發(fā)板
    的頭像 發(fā)表于 08-30 14:13 ?2345次閱讀
    <b class='flag-5'>RK3588</b>!黑神話悟空,啟動?-迅<b class='flag-5'>為</b>電子<b class='flag-5'>RK3588</b>開發(fā)板

    rk3588硬件原理圖

    RK3588硬件參考設(shè)計
    發(fā)表于 02-25 17:44 ?44次下載

    深入理解?RK3506 U-Boot?重定位:代碼原理

    嵌入式系統(tǒng)U-Boot?作為引導(dǎo)加載程序,其啟動流程的核心環(huán)節(jié)之就是 重定位(Relocation) 。對于?RK3506?這類基于
    的頭像 發(fā)表于 11-28 07:05 ?615次閱讀
    深入理解?<b class='flag-5'>RK</b>3506 <b class='flag-5'>U-Boot</b>?重定位:<b class='flag-5'>從</b>代碼<b class='flag-5'>到</b>原理

    RK3588開發(fā)環(huán)境搭建“三步曲”,輕松上手!

    RK3588開發(fā)環(huán)境搭建“三步曲”,輕松上手!
    的頭像 發(fā)表于 12-01 11:51 ?1209次閱讀
    迅<b class='flag-5'>為</b><b class='flag-5'>RK3588</b>開發(fā)環(huán)境搭建“三步曲”,<b class='flag-5'>從</b><b class='flag-5'>零</b><b class='flag-5'>到</b><b class='flag-5'>一</b>輕松上手!

    深入解析RK3588 U-Boot板級文件:evb_rk3588.c核心邏輯拆解

    嵌入式開發(fā)領(lǐng)域,瑞芯微RK3588憑借超強(qiáng)的算力、豐富的接口和廣泛的場景適配性,成為高端邊緣計算、消費(fèi)電子項(xiàng)目的熱門選擇。而U-Boot作為嵌入式系統(tǒng)的“第道門”,負(fù)責(zé)
    的頭像 發(fā)表于 02-24 15:24 ?786次閱讀
    深入解析<b class='flag-5'>RK3588</b> <b class='flag-5'>U-Boot</b>板級文件:evb_<b class='flag-5'>rk3588</b>.c核心邏輯拆解