This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/AM3352:MMC3通信问题

Guru**** 2540720 points
Other Parts Discussed in Thread: AM3352

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/716450/linux-am3352-mmc3-communication-issue

器件型号:AM3352

工具/软件:Linux

大家好、

通过 am3352 (在设备树节点中:MMC@47810000)上的 mmc3实例与通过 SDIO 连接的 SDCard 进行通信似乎不起作用。 我怀疑设备树中的设置不正确、特别是 DMA 配置。 但我无法确定正确的设置是什么。

使用另一个 CPU 板、该 CPU 板连接到主板上的同一 sdcard、但使用 CPU 板上的 mmc1实例、工作正常。 硬件接线正常。

一般/系统信息:

* Linux 内核版本:v4.4.97

*毫米波3配置的器件树片段:

/* JTAG 电路板上的 SD 卡*/

am33xx_pinmux{(am33xx_pinmux)}
(笑声)

mmc2_pins:pinmux_mmc2_pins{
pinctrl-single、pins =<
0x030 (PIN_INPUT_PULLUP | MUX_MODE3)/* GPMC_AD12.mmc2_Data0、39、NC (SD_DATA0)*
0x034 (PIN_INPUT_PULLUP | MUX_MODE3)/* GPMC_AD13.mmc2_data1、44、NC (SD_Data1)*
0x038 (PIN_INPUT_PULLUP | MUX_MODE3)/* GPMC_AD14.mmc2_data2、40、NC (SD_DATA2)*
0x03c (PIN_INPUT_PULLUP | MUX_MODE3)/* GPMC_AD15.mmc2_data3、32、NC (SD_DATA3)*
0x088 (PIN_INPUT_PULLUP | MUX_MODE3)/* GPMC_CSn3.mmc2_cmd、56、NC (SD_CMD)*
0x08c (PIN_INPUT | MUX_MODE3)/* GPMC_CLK.mmc2_clk、43、NC (SD_CLK)*/
0x164 (PIN_INPUT_PULLUP | MUX_MODE7)/* ecap0_in_pwm0_OUT、60、NC (SD_DET)*/
0x11c (PIN_INPUT_PULLUP | MUX_MODE7)/* MII1_TXD3.GPIO0_16、31、NC (SD_Power)*/
>;

};
};

mmc3{(&M)
pinctrl-names ="default";
pinctrl-0 =<&mmc2_PINs>;
VMMC-SUPPLY =<&V vmmcsd_fixed1>;
最大频率=<50000000>;
DMA =<&EDMA_Xbar 12 0
EDMA_Xbar 13 0 0>;
dma-names ="TX"、"Rx";
状态="正常";
总线宽度=<1>;
disable-wp;
CD-GPIO =<&GPIO0 7 GPIO_ACTIVE_LOW>;/* ecap0_in_pwm0_OUT、60、NC (SD_DET)*/
MMC-REPLY-GO-IDLE;
};

*从 DMSG 调试消息日志:

root@etamin:~# dmesg | grep mmc
[1.117419] OMAP-Hsmmc 48060000.MMC:消费类 CD 的 GPIO 查找
[1.117445] OMAP-Hsmmc 48060000.MMC:使用器件树进行 GPIO 查找
[1.117487] of _get_named_gpio_FLAGS:解析节点'/ocp/mmc@48060000[0]的'CD-GPIO'属性-状态(0)
[1.117593] OMAP_hsmmc 48060000.MMC:获得了 CD GPIO
[1.122459] omap_hsmmc 48060000.mmc:GPIO 查找消费类 WP
[1.122471] OMAP_hsmmc 48060000.MMC:使用器件树进行 GPIO 查找
[1.122485] of _get_named_gpio_FLAGS:无法解析节点'/ocp/mmc@48060000[0]的'WP-GPIO'属性
[1.122500] of _get_named_gpio_FLAGS:无法解析节点'/ocp/mmc@48060000[0]的'wP-GPIO'属性
[1.122513] omap_hmc 48060000.mmc:使用查找表进行 GPIO 查找
[1.122526] omap_hmc 48060000.mmc:查找 GPIO WP 失败
[1.122650] omap_hmc 48060000.mmc:恢复上下文:恢复计数1.
[1.122664] OMAP-Hsmmc 48060000.MMC:已启用
[1.123023] omap_hsmmc 48060000.mmc:无法获取 VMMC_AUX 稳压器-19
[1.123047] omap_hmc 48060000.mmc:无法获取 pbias 稳压器-19
[1.124188] mmc0:时钟0Hz 总线模式2功率模式1 cs 0 Vdd 21宽度0时序0
[1.124236] omap_hmc 48060000.mmc:3.3V 的初始信号电压
[1.143628] mmc0:时钟400000Hz 总线模式2功率模式2 cs 0 Vdd 21宽度0计时0
[1.163772] mmc0:MMC_rescan_try_freq:尝试以400000Hz 的频率初始化卡
[1.170745] mmc0:启动 CMD52 arg 00000c00标志00000195
[1.171142] mmc0:请求完成(CMD52):-110:00000000 00000000 00000000 00000000
[1.171221] omap_hsmmc 4781000.mmc:消费类 CD 的 GPIO 查找
[1.171237] omap_hsmmc 4781000.mmc:使用器件树进行 GPIO 查找
[1.171277] of _get_named_gpio_FLAGS:解析了节点'/ocp/mmc@47810000[0]的'CD-GPIO'属性-状态(0)
[1.171302] OMAP_hsmmc 4781000.MMC:获得 CD GPIO
[1.176269] omap_hsmmc 4781000.MMC:GPIO 查找消费类 WP
[1.176285] OMAP-Hsmmc 4781000.MMC:使用器件树进行 GPIO 查找
[1.176301] of_get_named_gpio_FLAGS:无法解析节点'/ocp/mmc@47810000[0]的'WP-GPIO'属性
[1.176315] of_get_named_gpio_FLAGS:无法解析节点'/ocp/mmc@47810000[0]的'WP-GPIO'属性
[1.176328] OMAP_hsmmc 4781000.MMC:使用查找表进行 GPIO 查找
[1.176341] OMAP_hsmmc 4781000.MMC:查找 GPIO WP 失败
[1.176481] OMAP-Hsmmc 4781000.MMC:恢复上下文:恢复计数1.
[1.176496] OMAP_hsmmc 4781000.MMC:已启用
[1.176807] OMAP-Hsmmc 4781000.MMC:无法获取 VMMC_AUX 稳压器-19
[1.176830] omap_hmc 4781000.mmc:无法获取 pbias 稳压器-19
[1.177127] mmc0:启动 CMD52参数80000c08标志00000195
[1.177211] mmc1:时钟0Hz 总线模式2功率模式1 cs 0 Vdd 21宽度0时序0
[1.177239] OMAP-Hsmmc 4781000.MMC:3.3V 的初始信号电压
[1.177526] mmc0:请求完成(CMD52):-110:00000000 00000000 00000000 00000000
[1.177570] mmc0:时钟400000Hz 总线模式2功率模式2 cs 1 Vdd 21宽度0计时0
[1.178589] mmc0:启动 CMD0参数00000000标志000000c0
[1.178758] mmc0:请求完成(CMD0):0:00000000 00000000 00000000 00000000
[1.179784] mmc0:时钟400000Hz 总线模式2功率模式2 cs 0 Vdd 21宽度0计时0
[1.180800] mmc0:启动 CMD8参数000001aa 标志000002f5
[1.181165] mmc0:请求完成(CMD8):-110:00000000 00000000 00000000 00000000
[1.181189] mmc0:启动 CMD5参数00000000标志000002e1
[1.181560] mmc0:REQ 失败(CMD5):-110、正在重试...
[1.181928] mmc0:Req Failed (CMD5):-110、正在重试...
[1.182295] mmc0:请求失败(CMD5):-110、正在重试...
[1.182657] mmc0:请求完成(CMD5):-110:00000000 00000000 00000000 00000000
[1.18261] mmc0:启动 CMD55 arg 00000000标志000000f5
[1.183045] mmc0:请求完成(CMD55):-110:00000000 00000000 00000000 00000000
[1.183066] mmc0:启动 CMD55 arg 00000000标志000000f5
[1.183430] mmc0:请求完成(CMD55):-110:00000000 00000000 00000000 00000000
[1.183451] mmc0:启动 CMD55 arg 00000000标志000000f5
[1.183819] mmc0:请求完成(CMD55):-110:00000000 00000000 00000000 00000000
[1.183844] mmc0:启动 CMD55 arg 00000000标志000000f5
[1.184208] mmc0:请求完成(CMD55):-110:00000000 00000000 00000000 00000000
[1.184234] mmc0:时钟400000Hz 总线模式1功率模式2 cs 0 Vdd 21宽度0计时0
[1.184253] mmc0:启动 CMD1 arg 00000000标志000000e1
[1.184558] mmc0:请求完成(CMD1):0:00ff8000000000 00000000 00000000
[1.184585] mmc0:时钟400000Hz 总线模式1功率模式2 cs 0 Vdd 21宽度0计时0
[1.184603] mmc0:时钟400000Hz 总线模式1功率模式2 cs 1 Vdd 21宽度0计时0
[1.185615] mmc0:启动 CMD0参数00000000标志000000c0
[1.185778] mmc0:请求完成(CMD0):0:00000000 00000000 00000000 00000000
[1.186797] mmc0:时钟400000Hz 总线模式1功率模式2 cs 0 Vdd 21宽度0计时0
[1.187810] mmc0:启动 CMD1 arg40200000 flags 000000e1
[1.188115] mmc0:请求完成(CMD1):0:00ff8000000000 00000000 00000000
[1.193544] mmc1:时钟400000Hz 总线模式2功率模式2 cs 0 Vdd 21宽度0计时0
[1.203572] mmc0:启动 CMD1并标记40200000 000000e1
[1.203884] mmc0:请求完成(CMD1):0:c0ff8000000000 00000000 00000000
[1.203908] mmc0:启动 CMT2参数00000000标志00000067
[1.204436] mmc0:请求完成(CMT2):0:13014e52 314a3536 4c1111d5 a090c2e1
[1.204465] mmc0:启动 CMD1 arg00010000 flags 00000015
[1.204770] mmc0:请求完成(CMD3):0:00000500 00000000 00000000 00000000
[1.204793] mmc0:时钟400000Hz 总线模式2功率模式2 cs 0 Vdd 21宽度0计时0
[1.204812] mmc0:启动 CMD9 arg00010000标志00000007
[1.205338] mmc0:请求完成(CMD9):0:d04f0132 0f5913ff ffffffffff 8a4000bf
[1.205364] mmc0:启动 CMD7 arg 00010000标志00000015
[1.205670] mmc0:请求完成(CMD7):0:00000700 00000000 00000000 00000000
[1.205712] mmc0:启动 CMD8参数00000000标志000000b5
[1.205728] mmc0:blksz 512块1个标志00000200 TSAC 400 ms NSAC 1000
[1.221959] mmc0:请求完成(CMD8):0:00000900 00000000 00000000 00000000
[1.221966] mmc0:传输的512字节:0
[1.222027] mmc0:未设置 MAN_BKOPS_EN 位
[1.227515] mmc0:启动 CMD6参数03af0101标志0000049d
[1.232689] mmc0:请求完成(CMD6):0:00000800 00000000 00000000 00000000
[1.232722] mmc0:启动 CMD13 arg00010000标志00000195
[1.239198] mmc0:请求完成(CMD13):0:00000900 00000000 00000000 00000000
[1.239335] mmc0:启动 CMP6参数03220101标志0000049d
[1.246699] mmc0:请求完成(CMD6):0:00000800 00000000 00000000 00000000
[1.246789] mmc0:启动 CMD13 arg00010000标志00000195
[1.254433] mmc0:请求完成(CMD13):0:00000900 00000000 00000000 00000000
[1.254571] mmc0:启动 CMP6参数03b90101标志0000049d
[1.255106] mmc0:请求完成(CMD6):0:00000800 00000000 00000000 00000000
[1.255141] mmc0:启动 CMD13 arg00010000标志00000195
[1.260787] mmc0:Req Done (CMD13):0:00000900 00000000 00000000 00000000
[1.260815] mmc0:时钟400000Hz 总线模式2功率模式2 cs 0 Vdd 21宽度0计时1
[1.260840] mmc0:时钟52000000Hz 总线模式2功率模式2 cs 0 Vdd 21宽度0计时1
[1.260861] mmc0:启动 CMP6参数03b70201标志0000049d
[1.265527] mmc0:请求完成(CMD6):0:00000800 00000000 00000000 00000000
[1.265637] mmc0:启动 CMD13 arg00010000标志00000195
[1.265669] mmc0:请求完成(CMD13):0:00000900 00000000 00000000 00000000
[1.265804] mmc0:时钟52000000Hz 总线模式2功率模式2 cs 0 Vdd 21宽度3计时1
[1.265828] mmc0:启动 CMD8参数00000000标志000000b5
[1.265842] mmc0:blksz 512块1个标志00000200 TSAC 400 ms NSAC 1000
[1.270717] mmc0:请求完成(CMD8):0:00000900 00000000 00000000 00000000
[1.270724] mmc0:传输的512字节:0
[1.270765] mmc0:启动 CMP6参数03a10101标志0000049d
[1.271439] mmc0:请求完成(CMD6):0:00000800 00000000 00000000 00000000
[1.271517] mmc0:启动 CMD13 arg00010000标志00000195
[1.271549] mmc0:请求完成(CMD13):0:00000900 00000000 00000000 00000000
[1.271576] mmc0:启动 CMP6参数03210101标志0000049d
[1.277924] mmc0:请求完成(CMD6):0:00000800 00000000 00000000 00000000
[1.278073] mmc0:启动 CMD13 arg00010000标志00000195
[1.278108] mmc0:请求完成(CMD13):0:00000900 00000000 00000000 00000000
[1.278249] mmc0:地址0001处的新高速 MMC 卡
[1.294799] mmcblk0:mmc0:0001 R1J56L 6.88 GiB
[1.299889] mmcblk0boot0:mmc0:0001 R1J56L 分区1 16.0 mib
[1.319522] OMAP_hsmmc 4781000.MMC:已禁用
[1.319869] mmcblk0boot1:mmc0:0001 R1J56L 分区2 16.0 mib
[1.327069] mmc0:启动 CMD18 arg 00000000标志000000b5
[1.327092] mmc0:blksz 512块8个标志00000200 TSAC 400 ms NSAC 1000
[1.327103] mmc0:CMD12参数00000000标志00000095
[1.331909] mmc0:请求完成(CMD18):0:00000900 00000000 00000000 00000000
[1.331916] mmc0:传输的4096字节:0
[1.331923] mmc0:(CMD12):0:00000b00 00000000 00000000 00000000
[1.332153] mmc0:启动 CMD18 arg 00340800 flags 000000b5
[1.332170] mmc0:blksz 512块8个标志00000200 TSAC 400 ms NSAC 1000
[1.332182] mmc0:CMD12参数00000000标志00000095
[1.336973] mmc0:请求完成(CMD18):0:00000900 00000000 00000000 00000000
[1.336987] mmc0:传输的4096字节:0
[1.336998] mmc0:(CMD12):0:00000b00 00000000 00000000 00000000
[1.337159] mmc0:启动 CMD18 arg 00be0008标记000000b5
[1.337175] mmc0:blksz 512块8个标志00000200 TSAC 400 ms NSAC 1000
[1.337187] mmc0:CMD12参数00000000标志00000095
[1.344198] mmc0:请求完成(CMD18):0:00000900 00000000 00000000 00000000
[1.344211] mmc0:传输的4096字节:0
[1.344223] mmc0:(CMD12):0:00000b00 00000000 00000000 00000000
[1.344288] mmcblk0:P1 p2 p3 p4 < p5 p6 >
[1.358271] OMAP_hsmmc 4781000.MMC:已启用
[1.358305] mmc1:MMC_rescan_try_freq:尝试以400000Hz 的频率初始化卡
[1.372801] mmc1:启动 CMD52参数00000c00标志00000195
[1.372930] mmc1:Req Done (CMD52):-110:00000000 00000000 00000000 00000000
[1.373809] mmc1:启动 CMD52参数80000c08标志00000195
[1.373916] mmc1:请求完成(CMD52):-110:00000000 00000000 00000000 00000000
[1.373952] mmc1:时钟400000Hz 总线模式2功率模式2 cs 1 Vdd 21宽度0计时0
[1.374970] mmc1:启动 CMD0参数00000000标志000000d5
[1.375053] mmc1:请求完成(CMD0):-110:00000000 00000000 00000000 00000000
[1.384708] mmc1:时钟400000Hz 总线模式2功率模式2 cs 0 Vdd 21宽度0计时0
[1.385734] mmc1:启动 CMD8参数000001aa 标志000002f5
[1.385831] mmc1:请求完成(CMD8):-110:00000000 00000000 00000000 00000000
[1.386023] mmc1:启动 CMD5参数00000000标志000002e1
[1.386128] mmc1:请求失败(CMD5):-110、正在重试...
[1.386225] mmc1:请求失败(CMD5):-110、正在重试...
[1.386312] mmc1:请求失败(CMD5):-110、正在重试...
[1.386397] mmc1:Req Done (CMD5):-110:00000000 00000000 00000000 00000000
[1.386427] mmc1:启动 CMD55 arg 00000000标志000000f5
[1.386507] mmc1:Req Done (CMD55):-110:00000000 00000000 00000000 00000000
[1.386531] mmc1:启动 CMD55 arg 00000000标志000000f5
[1.386618] mmc1:请求完成(CMD55):-110:00000000 00000000 00000000 00000000
[1.386644] mmc1:启动 CMD55 arg 00000000标志000000f5
[1.386729] mmc1:REQ DONE (CMD55):-110:00000000 00000000 00000000 00000000
[1.386754] mmc1:启动 CMD55 arg 00000000标志000000f5
[1.386835] mmc1:请求完成(CMD55):-110:00000000 00000000 00000000 00000000
[1.386864] mmc1:时钟400000Hz 总线模式1功率模式2 cs 0 Vdd 21宽度0计时0
[1.386884] mmc1:启动 CMD1 arg 00000000标志000000e1
[1.386966] mmc1:请求完成(CMD1):-110:00000000 00000000 00000000 00000000
[1.386996] mmc1:时钟0Hz 总线模式2功率模式0 cs 0 Vdd 0宽度0计时0
[1.453836] OMAP-Hsmmc 48060000.MMC:已禁用
[1.483554] OMAP-Hsmmc 4781000.MMC:已禁用

有什么想法吗?

谢谢

Sam

 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Sam、

    [引用 user="Samuel egli"]使用另一个 CPU 板,该 CPU 板连接到主板上的同一 sdcard,但使用 CPU 板上的 mmc1实例,效果不错。

    根据我的理解、MMC1/0x481D8000在您的 AM335x 定制板上工作正常、而 MMC2/0x47810000出现故障。 您可以转储 MMC1和 MMC2寄存器、并比较这些值的差异。

    [引用 user="Samuel egli"]* Linux 内核版本:v4.4.97[/quot]

    TI 不支持此内核。 如果您可以切换到 AM335x TI PSDK 随附的内核、我们可以提供更好的帮助。 TI 支持的最新4.4.x 内核为4.4.41、随附 PSDK v3.03 (链接如下):

    您还可以使用4.9.x 内核和4.14.40

    另请注意、对于引导、您可以使用 MMC0或 MMC1、但不能使用 MMC2。

    另请检查 CM_PER_MMC2_CLKCTRL 和 MMC2控制模块引脚多路复用寄存器中的值。 使用用户空间中的 devmem2工具检查这些设置、因为某些其他代码可能会覆盖内核中的这些设置。

    [引用用户="Samuel egli"]总线宽度=<1>;

    当您使用4条数据线(mmc2_data0至 mmc2_dat3)时、这应该是"总线宽度=<4>"

    此致、
    帕维尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Pavel、

    感谢您的回复。 我们无法从 MMC2引导的有趣点。 这实际上是目的。 因此、我可以省去检查错误的努力。

    此致

    Sam

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Sam、

    AM335x ROM 代码仅支持 MMC0和 MMC1、因此您只能从这些 MMC 实例引导。 有关更多信息、请参阅 AM335x TRM 第26.1.8.5节 MMC/SD 卡

    此致、
    帕维尔