S3(Master)《=SDIO=》C6 (Slave)example 用例 timeout

sjhuang
Posts: 6
Joined: Fri Sep 20, 2024 8:30 am

S3(Master)《=SDIO=》C6 (Slave)example 用例 timeout

Postby sjhuang » Fri Sep 20, 2024 9:24 am

如题,这个问题刚刚在别人的帖子发了,结果自己都找不到,这里单独发一个出来,万一有好心人回答呢。。。

环境:如题:S3(Master)《=SDIO=》C6 (Slave) 使用 V5.3.1 的 examples/peripherals/sdio
物理连接,按照官网描述
S3 || C6
IO15 CMD 18
IO14 CLK 19
IO2 D0 20
IO4 D1 21
IO12 D2 22
IO13 D3 23

pullup 处理
外接 10K pullup;
或者使用 IC 内置的 pullup: 打开其配置flag:.flags = SDIO_SLAVE_FLAG_INTERNAL_PULLUP,

现象:
S3 可以发出 CLK + CMD,但 C6 总是不响应 S3 的CMD(C6 不回 Response)

目前还没有看其 SDIO 的 reg,初步dump 其中断相关的 reg,看起来是有反应的:
slc->slc0int_raw 在 Master 发 cmd 后,会变为:210000 =》2210000
但其 bit25 又是 reserved 的 !!!

Code: Select all

        /** cmd_dtc_int_st : RO; bitpos: [25]; default: 0;
         *  reserved
         */
        uint32_t cmd_dtc_int_st:1;
目前就不好继续往下看了,再下一步需要研究其 SDIO 所有 reg。
dump了部分reg,只有 slc0int_raw有变化。

Code: Select all

[color=#FF00BF]raw:2210000[/color] st:0 st1:0 ena:240ff ena1:0
slc0_done_dscr_addr:4080c248 slc0_push_dscr_addr:4080c248 slc0_dscr_cnt:0 slc0_dscr_rec_conf:3ff
slc0_len_conf:10000000 slc0_len_lim_conf:5400 slc0_rxlink_dscr:0 slc0_rxlink_dscr_bf0:0
slc0_rxpkt_e_dscr:0 slc0_rxpkt_h_dscr:0 slc0_txlink_dscr:40811eac slc0_txlink_dscr_bf0:40811e98
slc0_txpkt_e_dscr:0 slc0_txpkt_h_dscr:0

sjhuang
Posts: 6
Joined: Fri Sep 20, 2024 8:30 am

Re: S3(Master)《=SDIO=》C6 (Slave)example 用例 timeout

Postby sjhuang » Thu Sep 26, 2024 10:37 am

今天又来debug,更新一些实验信息:
【HW 】
1. 示波器观察波形
波形的level,没有问题
2. 逻辑分析仪
Master 有输出: CLK 和 CMD , Slave 没有回 CMD8 的 Response —— 一切看起来都是 SDIO slave 没有对
3. 重新购买 ESP32
ESP32 与 ESP32C6 现象一致
基本排除了芯片问题
【SW】
1. 看是不是reg 有指偏—— 结果排除
SDIO_SLCCONF0_REG = ff3cbf40 ,发现和其 spec 对得起来。。。
2. pinmux 是否设置正确—— 没有问题
确定其C6 sdio fuc = 0 即为 SDIO slave 配置,dump reg:IO_MUX_GPIOn_REG = 0xE02
Bit1 =1 IO_MUX_GPIOn_SLP_SEL 配置是否使能 GPIOn 进入睡眠模式。
Bit9=1 使能 GPIOn 的输入
Bit[11:10] 驱动强度 设置为最大
重要的 Func [14:12] = 000 , SDIO slave
3. 打开 debug level 为 Verbose
可以看到有 assert 异常,结果是临界区内有打印,暂时关闭临界区,或者把打印拿掉
4. 切换为 5.1.4 版本
没有改善
5. SDIO 1bit 模式
没有改善
6. REG polling 状况

Code: Select all

    slcconf0:ff3cbf40                 slc0token1:100000 
    slc0tx_link:0                       
    slc0_txlink_dscr:408121ec         slc0tx_link_addr:408121c4 
    slc0txfifo_pop:400                slc0_txlink_dscr_bf0:408121d8 
    slc0_txlink_dscr_bf1:c080ba80 
    slc0_rxlink_dscr:0                slc0rxfifo_push:0 
    slc0_rxlink_dscr_bf0:0            slc0_rxlink_dscr_bf1:bffbbbbb 
    slc0int_raw:2210000               slc0int_st:0 
    slc0int_st1:0                     slc0int_ena:240ff 
    slc0int_ena1:0                    slcdate:21082700
====== 目前先告一段落,暂时没有方向,后面找其他人试试,再来对问题。

sjhuang
Posts: 6
Joined: Fri Sep 20, 2024 8:30 am

Re: S3(Master)《=SDIO=》C6 (Slave)example 用例 timeout

Postby sjhuang » Fri Sep 27, 2024 12:56 am

网页太慢了,昨天发的回复还没有看到,再补一张环境图。
总结来看,应该是 C6 SDIO Controller 没有正常动起来,具体原因就暂时不花时间了。
网上看很多是提到 Pullup 电阻,与信号问题,那是基于identify 之后,切换到 DS 或者 HS 才会出现的,目前 400KHz 都不过,实在诡异。
Attachments
ESP32_S3(Master)==SDIO==C6(Slave)--CMD8_Timeout.png
ESP32_S3(Master)==SDIO==C6(Slave)--CMD8_Timeout.png (2.64 MiB) Viewed 598 times

sjhuang
Posts: 6
Joined: Fri Sep 20, 2024 8:30 am

Re: S3(Master)《=SDIO=》C6 (Slave)example 用例 timeout

Postby sjhuang » Sun Sep 29, 2024 12:45 am

周末刷了几集【边水往事】,有一句话很应景:
念念相续,无有间断 身语意业,无有疲厌

程序员也得坚持,所以后面再挤点时间,看 SDIO Slave Controller 的使用和目前Driver 实现。
有进展再更新到这里了。

sjhuang
Posts: 6
Joined: Fri Sep 20, 2024 8:30 am

Re: S3(Master)《=SDIO=》C6 (Slave)example 用例 timeout

Postby sjhuang » Sun Sep 29, 2024 10:06 am

尽力了,今天大概理了Driver 和 TRM 描述:比较绕的逻辑是传输,是通过内存描述符与 HW 进行交互的

目前 Slave SDIO Driver大致过程
sdio_slave_driver.png
sdio_slave_driver.png (145.97 KiB) Viewed 388 times
========= 分割线 =======================================================
目前代码主要关注 TX 就是 slave 收数据(recv)这边的状况:
前看不异常:反正debug DMA recv 描述符没有变化:owner 一直是1,就是SW 提交给 HW 后,HW 没有回写
slc0tx_link =0,强制 restart,HW 可以继续置 start。

Code: Select all

SDIO_HAL: desc:40811ec0 buf:4080b7d4( 0  0) size:80 length:0 sosf:0 eof:0 owner:1
SDIO_HAL: slc0_txlink_addr:40811ec0 slc0tx_link:40000000 slc0host_token_rdata:0
没有看到的点:
对应Master 的 CMD8 给到 Slave 预期会发生什么?
CMD8 怎么和 Slave 的 Controller 交互,这个目前没有从代码和TRM里面看到。
Controller 是通过哪个 reg 自动 回复 Master 的?
因为没有在数据阶段,所以 DMA recv 描述符即使已经给 HW 了,但是 HW 没有处理。

Who is online

Users browsing this forum: No registered users and 50 guests