如何解决移动存储主机控制器从 SD 卡读取时忽略电源开/关状态
恐怕我的问题可能是针对板卡或 SoC 的。无论如何,我希望有人有这方面的经验。
SoC:RK3308(主板:ROCK Pi S)。我在裸机环境下从 SD 卡读取:AArch64 EL3,DDR 初始化,MMU/GIC 禁用。
从 SD 卡读取块。我认为,BootROM 将为我完成所有初始化,并且当我的代码获得控制权时,SD 卡就可以使用了。这是。我可以成功地从卡中读取 - FIFO 已满。我的问题如下:
RK3308 Technical Reference Manual Part 2,第 3 章介绍了移动存储主机控制器。
SDMMC_PWren 电源使能寄存器
位 [0]:power_enable。 卡的电源开关。 一旦打开电源,固件应等待 尝试初始化卡之前的调节器/开关斜升时间。
1'b0:断电 1'b1:开机
比特值输出到 card_power_en 端口
还有,
SDMMC_CMD 命令寄存器
位 [15] 发送初始化
1'b0:发送此命令前不发送初始化序列(80个时钟为1)
1'b1:发送此命令前发送初始化序列 上电后,必须向卡发送80个时钟进行初始化 在向卡发送任何命令之前。位应该被设置,而 向卡发送第一个命令,以便控制器初始化 发送命令到卡之前的时钟。这一点不应该 设置为任一启动模式(交替或强制)
问题是当我的代码从 BootROM 代码获得控制权时,SDMMC_PWren[0] = 0
(断电)。但是从卡中读取是成功的。我尝试设置 SDMMC_PWren[0] = 1
,我还尝试在上电后的第一个命令之前为 80 时钟初始化序列设置 SDMMC_CMD[15] = 1
。这一切似乎都没有任何效果。在所有情况下从卡中读取(CMD17)都是成功的。但是,如果我在设置 response timed out
后尝试发出这些命令,CMD0/CMD8 序列将失败并显示 power_enable=1
错误。
SDMMC_CTRL 0x00000000
SDMMC_PWren 0x00000000
SDMMC_CLKDIV 0x00000000
SDMMC_CLKSRC 0x00000000
SDMMC_CLKENA 0x00000001
SDMMC_TMOUT 0xFFFFFF40
SDMMC_CTYPE 0x00000001
SDMMC_BLKSIZ 0x00000200
SDMMC_BYTCNT 0x00000200
SDMMC_INTMASK 0x00000000
SDMMC_CMDARG 0x00001040
SDMMC_CMD 0x20002351
SDMMC_RESP0 0x00000000
SDMMC_RESP1 0x2023BC16
SDMMC_RESP2 0x53443030
SDMMC_RESP3 0x9C534F55
SDMMC_MINTSTS 0x00000000
SDMMC_RINTSTS 0x0000000C
SDMMC_STATUS 0x03000101
SDMMC_FIFOTH 0x307F0080
SDMMC_CDETECT 0x00000000
SDMMC_WRTPRT 0x00000000
SDMMC_TCBCNT 0x00000000
SDMMC_TBBCNT 0x00000000
SDMMC_DEBNCE 0x00FFFFFF
SDMMC_HCON 0x04C434C1
SDMMC_UHS_REG 0x00000000
SDMMC_RSTN 0x00000001
我不明白 SDMMC_PWren
寄存器的实际用途以及如何/何时使用它。任何细节将不胜感激。
我的测试代码很简单:
. . .
.probe_device:
str x30,[sp,-16]!
bl .serial__send_string
ldr w11,[x2,SDMMC_CDETECT]
tbnz w11,.device_absent
adr x0,.msg__present
bl .serial__send_string
ldr w10,SDMMC_CMD] ; BootROM leaves SDMMC_CMD register
orr w10,w10,1 shl 31 ; pre-filled for CMD17,so I just
str wzr,SDMMC_CMDARG] ; change block address to 0
str w10,SDMMC_CMD] ; to read from the first block
ldr w11,SDMMC_RINTSTS]
tbz w11,2,$ - 4 ; wait until command completed
. . .
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。