1、MMC error: The cmd index is 16, ret is -110
2、blk_update_request: I/O error, dev mmcblk1
3、mmcblk1: error -110 transferring data, sector 11670176, nr 192, cmd response 0x900, card status 0x0
1、先更新EMMC驅動確認,下載地址:https://redmine.rock-chips.com/documents/50
注意: UBOOT驅動更新後,重新編譯需要加"--spl-new"選項才會使用新編譯的SPL,否則還是使用rkbin倉庫預編譯好的SPL。
2、更新驅動後還有問題,(非SDHCI控制器,DTS裡面沒有sdhic節點)可以配置一下DTS和修改超時時間:
2.1 EMMC(SDMMC)的dts節點配置:rockchip,default-sample-phase = <90>; 或者rockchip,default-sample-phase = <180>;
2.2 把rockchip,use-v2-tuning;刪除掉,用全空間掃描的tuning(全空間掃描可以確認可以設置的最佳相位,如果還要用V2 tuning,可以把最佳相位配置成rockchip,default-sample-phase)
2.3 個別EMMC顆粒讀特定位置數據很慢,會出現-110超時,可以更新附件補丁改大dto和xfer的超時時間。
2.4 查看一下EMMC的壽命,在控制台輸入:find .|grep life_time,cat找到節點,比如:cat ./sys/devices/platform/2a330000.mmc/mmc_host/mmc0/mmc0:0001/life_time
0x01 0x01 (SLC區域的壽命,TLC區域的壽命)
壽命信息:
值 0x0 :不支持壽命信息
值 0x1-0xA: 0%-10%, 10%-20%,...90%-100%
值 0xB: 壽命已經使用完
2.5 HS400/HS400ES模式讀數據出錯(sdhci控制器),可以下載DS測試腳本測試有效窗口,然後查看驅動代碼中對應平台的DS配置,".hs400_strbin_tap",確認是否在有效窗口內,如果uboot下就出錯,可以先手動修改(可以配置值0-12),能夠啟動到kernel後再測試。腳本下載地址:https://redmine.rock-chips.com/documents/50
2.6 dts裡面去掉HS400、HS200模式或者SDR104
2.7 dts裡面降低接口頻率(修改max-frequency)
3、如果還有問題,硬體先確認:
3.1 VCCQ/VCC供電是否正常(沒有出現電源塌陷),如果需要跑HS200或者HS400模式,VCCQ電壓需要1.8V(flash_sel也需要匹配配置)。
3.2 RK356X,RK3588,RK3399,RK3528和RK3562平台發布SDK的升級代碼默認啟用了HS200以上模式,因此只能支持VCCQ 1.8V。如果布錯成3.3v,可以先飛線調試,後續改版解決。
3.3 VDDI電容容值在1uF以上,如果跑HS400模式,電容容值需要在2.2uf。
3.4 EMMC DS是否有接下拉電阻,如果有,可以去掉試試。
3.5 如果一直報錯,還有可能是軟體問題,把IOMUX配置修改了,可以下載https://redmine.rock-chips.com/documents/108 pin_debug_tool_v1.12_20230310_win工具讀取晶片的IOMUX配置。
3.6 uboot下加載完kenrel dtb後或者uboot控制一些電源後出現通信報錯(MMC error: The cmd index is 16, ret is -110),原因是emmc的供電出現塌陷,造成emmc顆粒異常,比如WIFI上電。硬體先解決,軟體還可以注釋掉mmc_set_blocklen函數的調用,讀寫出錯時會重新初始化EMMC,可能也可以繞過。
3.7 VCC(3V)供電存在電源塌陷,比如和WIFI模塊或者HDMI共用電源,kerenl下(或者Uboot下)WIFI開啟瞬間有電源塌陷,出現EMMC顆粒或者TF卡異常,重新初始化可能也沒法恢復。(可以禁用其他模塊或者拆除確認)
3.8 主控端EMMC IO的供電上接的電容沒有貼或者貼的離腳位很遠,也可能造成EMMC通信時報錯。
4、硬體也沒有發現問題,做以下試驗後把情況提交redmine,同時提供原理圖和PCB(只提供EMMC部分也可以)。
注意: UBOOT驅動更新後,重新編譯需要加"--spl-new"選項才會使用新編譯的SPL,否則還是使用rkbin倉庫預編譯好的SPL。
2、更新驅動後還有問題,(非SDHCI控制器,DTS裡面沒有sdhic節點)可以配置一下DTS和修改超時時間:
2.1 EMMC(SDMMC)的dts節點配置:rockchip,default-sample-phase = <90>; 或者rockchip,default-sample-phase = <180>;
2.2 把rockchip,use-v2-tuning;刪除掉,用全空間掃描的tuning(全空間掃描可以確認可以設置的最佳相位,如果還要用V2 tuning,可以把最佳相位配置成rockchip,default-sample-phase)
2.3 個別EMMC顆粒讀特定位置數據很慢,會出現-110超時,可以更新附件補丁改大dto和xfer的超時時間。
2.4 查看一下EMMC的壽命,在控制台輸入:find .|grep life_time,cat找到節點,比如:cat ./sys/devices/platform/2a330000.mmc/mmc_host/mmc0/mmc0:0001/life_time
0x01 0x01 (SLC區域的壽命,TLC區域的壽命)
壽命信息:
值 0x0 :不支持壽命信息
值 0x1-0xA: 0%-10%, 10%-20%,...90%-100%
值 0xB: 壽命已經使用完
2.5 HS400/HS400ES模式讀數據出錯(sdhci控制器),可以下載DS測試腳本測試有效窗口,然後查看驅動代碼中對應平台的DS配置,".hs400_strbin_tap",確認是否在有效窗口內,如果uboot下就出錯,可以先手動修改(可以配置值0-12),能夠啟動到kernel後再測試。腳本下載地址:https://redmine.rock-chips.com/documents/50
2.6 dts裡面去掉HS400、HS200模式或者SDR104
2.7 dts裡面降低接口頻率(修改max-frequency)
3、如果還有問題,硬體先確認:
3.1 VCCQ/VCC供電是否正常(沒有出現電源塌陷),如果需要跑HS200或者HS400模式,VCCQ電壓需要1.8V(flash_sel也需要匹配配置)。
3.2 RK356X,RK3588,RK3399,RK3528和RK3562平台發布SDK的升級代碼默認啟用了HS200以上模式,因此只能支持VCCQ 1.8V。如果布錯成3.3v,可以先飛線調試,後續改版解決。
3.3 VDDI電容容值在1uF以上,如果跑HS400模式,電容容值需要在2.2uf。
3.4 EMMC DS是否有接下拉電阻,如果有,可以去掉試試。
3.5 如果一直報錯,還有可能是軟體問題,把IOMUX配置修改了,可以下載https://redmine.rock-chips.com/documents/108 pin_debug_tool_v1.12_20230310_win工具讀取晶片的IOMUX配置。
3.6 uboot下加載完kenrel dtb後或者uboot控制一些電源後出現通信報錯(MMC error: The cmd index is 16, ret is -110),原因是emmc的供電出現塌陷,造成emmc顆粒異常,比如WIFI上電。硬體先解決,軟體還可以注釋掉mmc_set_blocklen函數的調用,讀寫出錯時會重新初始化EMMC,可能也可以繞過。
3.7 VCC(3V)供電存在電源塌陷,比如和WIFI模塊或者HDMI共用電源,kerenl下(或者Uboot下)WIFI開啟瞬間有電源塌陷,出現EMMC顆粒或者TF卡異常,重新初始化可能也沒法恢復。(可以禁用其他模塊或者拆除確認)
3.8 主控端EMMC IO的供電上接的電容沒有貼或者貼的離腳位很遠,也可能造成EMMC通信時報錯。
4、硬體也沒有發現問題,做以下試驗後把情況提交redmine,同時提供原理圖和PCB(只提供EMMC部分也可以)。

