R3300L按reset鍵無法進入USB Burning模式的問題分析


最開始並沒有注意到這個問題, 因為從設備拿到手, 用USB Burning Tool刷入潛龍版的安卓4.4.2, 再到運行EmuELEC, Armbian, 再到給Kernel 5.3的Armbian編譯RTL8189FTV的驅動, 都還算順利. 因為Kernel 5.3也差不多搞定了, 開始打安卓的主意, 想看看能不能跑7.x版本的安卓. 固件包下了幾個, 要開始刷的時候出了狀況, 發現按着reset鍵再也無法進入USB Burning Mode了.

幾經調查, 試了另外兩台一樣已經刷過的R3300L, 百度上查類似的案例, 發現其他人也存在這種情況. 而且網友們提供的處理方法(4R19接地)完全無效.

於是開始研究UBOOT

這個設備跑過的系統不外乎潛龍的安卓4.4.2, 以及各種版本的EmuELEC, 各種版本的Armbian, 通過查資料, 發現Linux下面的fw_printenv和fw_setenv命令可以查看及修改UBOOT下的配置. EmuELEC下可以直接運行, 但是在高版本的Armbian下, 僅有可執行文件, 缺/etc/fw_env.config, 於是又查資料找到了對應S905L的config.

通過分析UBOOT的配置, 可以確認EmuELEC和Armbian都會對UBOOT配置進行修改, 但是它們的修改只是在bootcmd里加東西, 加上從sdcard和usb啟動的方法, 不應該會影響到組合鍵.

於是將其中一台焊上了TTL線座, 翻出來以前買的PL2303的USB串口線. 連的過程也是各種摸石頭過河. 首先是TX和RX的連線, 嘗試幾次后確定是PL2303的TX和RX分別接盒子的RX, TX. 然后是VCC線, 每次一連接, 盒子就上電啟動了, 根本沒法主動觀察啟動過程, 於是把VCC和GND拔掉, 這下不會自己啟動了, 但是啟動后看到的全是方塊狀亂碼, 最終是VCC不連, 只連GND, 才算又不自己啟動, 又能顯示正常.

觀察UBOOT的啟動日志發現, 按不按reset鍵, 連不連HDMI, 啟動日志基本完全一樣.

其中一行"Hit any key to stop autoboot:  0"給我造成了很大困惑, 因為不管怎么敲Enter鍵, 都不會進入UBOOT命令行, 我懷疑是因為這個0, 導致無法停下來. 查閱資料, 發現有個配置項bootdelay, 於是從0改成了5, 發現根本不起作用, UBOOT還是一路狂飆不停下來, 又查資料, 發現還有用Ctrl+C的, 再試依然無效. 再查資料, 發現還有用空格鍵的, 這個起作用了, 只要拍空格鍵, 就能進入UBOOT

繼續查資料, 發現還有個配置項叫 upgrade_key , 這個值是 "if gpio input GPIOH_6; then echo detect upgrade key; sleep 3; run update;fi;" 在日志中有這么一行"gpio: pin GPIOH_6 (gpio 55) value is 1", 憑借着曾經做過一些電路的經驗感覺這個不對. 如果reset鍵輸入是GPIOH_6, 那么在按下的時候肯定處於接地狀態, 不可能是高電平, 所以這行日志對應的就是upgrade_key當中 gpio input GPIOH_6 這行執行的結果, 並沒有檢測到reset鍵按下的狀態, 所以可以說是GPIOH_6這個寫錯了.

要找正確的gpio pin該怎么辦呢? 又查資料, 發現 gpio status -a 這個命令可以顯示所有的gpio狀態, 這就好辦了, 在reset鍵未按下和按下兩個狀態下, 分別執行一下這個命令, 把輸出的結果對比一下就出來了, 得到的正確pin是GPIOAO_2, 在按下前是GPIOAO_2: input: 1 [ ], 在按下之后變成了 GPIOAO_2: input: 0 [ ] 

再通過fw_setenv將正確的值設上

fw_setenv upgrade_key "if gpio input GPIOAO_2; then echo detect upgrade key; sleep 3; run update;fi;"

.按住reset重啟, 就可以觀察到usb burn的狀態了.

解決這個問題斷斷續續花了我大概三天時間, 從周五到周日, 可能對於對於專業選手很簡單, 但對於我很多是新事物, 要慢慢摸索. 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM