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
大家好、
我在仅使用 CD 引脚进行 SD 卡检测时遇到问题。 我有基于 DM8148的定制板、它支持两个 SD 卡、两个都分别作为 uart0_CTSN.mmc0_sdcd 和 spi0_CS1.mmc1_sdcd 引脚连接到 CD 引脚。 我还在使用 DVRRDK_04.01.00.02内核及所有参考源代码。
下面是板级配置文件中的 MMC 结构、
静态结构 OMAP2_hsmmc_info MMc[]={
{
MMc = 2、
.caps = MMC_CAP_4_bit_data、
.GPIO_CD =-EINVAL、/* CD 和 WP 专用引脚*
.GPIO_WP =-EINVAL、
.OCR_MASK = MMC_VDD_33_34、
}、
{
.mc = 1、
.caps = MMC_CAP_4_bit_data、
.GPIO_CD =-EINVAL、/* CD 和 WP 专用引脚*
.GPIO_WP =-EINVAL、
.OCR_MASK = MMC_VDD_33_34、
}、
{}/*终端*/
};
使用这些设置,我无法将两个 SD 卡用作热插拔。
现在、经过一些试验、我已经修改了下面的 MMC 板级配置文件结构、
静态结构 OMAP2_hsmmc_info MMc[]={
{
MMc = 2、
.caps = MMC_CAP_4_bit_data、
.GPIO_CD = GPIO_TO_PIN (1、6)、// CD 和 WP 专用引脚*
.GPIO_WP =-EINVAL、
.OCR_MASK = MMC_VDD_33_34、
}、
{
.mc = 1、
.caps = MMC_CAP_4_bit_data、
.GPIO_CD = GPIO_TO_PIN (1、15)、// CD 和 WP 专用引脚*
.GPIO_WP =-EINVAL、
.OCR_MASK = MMC_VDD_33_34、
}、
{}/*终端*/
};
我已将多路复用器设置分别更改为 spi0_CS1.GPIO1_6和 mmc2_clk.GPIO1_15。 通过此更改、我可以将两个 SD 卡用作热插拔。
现在我的问题是、为什么 CD 引脚功能不能与 DM8148正常工作? 修复此问题是否需要任何额外的补丁?
如果您需要更多详细信息、请告诉我。 此外、还可根据需要查找参考原理图快照。
此致、
Ravi Bhuva。
尊敬的 Ravi:
[引用 user="Ravi Bhuva"] .GPIO_CD =-EINVAL,/* CD 和 WP 专用引脚*/[/引用]
实际上、代码是:
.GPIO_CD =-EINVAL、//检查 setup_mmc2_PIN_mux ()*
该 setup_mmc2_PIN_mux ()正在导出 spi0_CS1引脚上的 GPIO1_6信号。 使用默认设置启动并从用户空间检查寄存器 PINCNTL80、您将看到该值实际上是针对 GPIO1_6而不是 mmc1_sdcd 的。
确保您的代码库中包含以下补丁:
此致、
帕维尔
我已经用我的代码交叉检查了您的输入。 两个 SD 卡仍然不能用于热插拔功能。
请在下面查找我的设置和测试内容、
从 U-Boot 引脚多路复用器的已用引脚:
MMMC-1:
MUX_VAL (PINCNTL72,(IEN | IPU | FCN7))/* SD0_SDCD */\
MMC-2:
MUX_VAL (PINCNTL80,(IEN | IPU | FCN2))/* SD1_SDCD */\
从板级配置文件中对两个 MMC 的内核使用、
静态结构 OMAP2_hsmmc_info MMc[]={
{
MMc = 2、
.caps = MMC_CAP_4_bit_data、
.GPIO_CD =-EINVAL、//检查 setup_mmc2_PIN_mux ()*
.GPIO_WP =-EINVAL、
.OCR_MASK = MMC_VDD_33_34、
}、
{
.mc = 1、
.caps = MMC_CAP_4_bit_data、
.GPIO_CD =-EINVAL、//检查 setup_mmc1_PIN_mux ()*
.GPIO_WP =-EINVAL、
.OCR_MASK = MMC_VDD_33_34、
}、
{}/*终端*/
};
静态 int setup_mmc2_pin_mux (void)
{
返回 OMAP-mux_init_signal ("spi0_CS1.GPIO1_6"、TI814X_PIN_INPUT_PULL_UP);
}
静态 int setup_mmc1_PIN_mux (void)
{
返回 omap_mux_init_signal ("uart0_CTSN.mmc0_sdcd"、
TI814X_PIN_INPUT_PULL_UP);
}
静态空__init ti8148_EVM_init (空)
{
(笑声)
setup_mmc2_PIN_mux ();
setup_mmc1_PIN_mux ();
(笑声)
}
运行时行为:
在系统启动日志中、
mmc0:主机不支持读取只读开关。 假设是写入使能。
mmc0:地址 AAAA 处的新 SDXC 卡
mmcblk0:mmc0:AAAA SC64G 59.4 GiB
mmcblk0:
mmc1:主机不支持只读开关。 假设是写入使能。
mmc1:地址 AAAA 处的新 SDXC 卡
mmcblk1:mmc1:AAAA SC64G 59.4 GiB
毫米波1:
#安装
rootfs 打开/键入 rootfs (RW)
ubi0:rootfs 打开/类型 ubifs (rw、relatme)
devtmpfs on /dev/type devtmpfs (rw、relatme、size=503580k、nr_inodes = 103567、mode=755)
proc on /proc type proc (rw、relatme)
/dev/shm 类型 tmpfs 上无(rw、relatme)
/dev/pts 类型设备上的设备(RW、相对值、mode=600)
/proc/bus/usb 上的 usbfs 类型 usbfs (rw、relatme)
/var/volatile 上的 tmpfs 类型 tmpfs (rw、relatime, size=16384k)
/media/ram 上的 tmpfs 类型 tmpfs (rw、relatime, size=16384k)
/sys 类型 sysfs 上的 sysfs (rw、relatme)
/media/mmcblk0上的/dev/mmcblk0类型:vfat (rw、relatme、fmask=0000、dmask=0000、allow_utime=0022、键盘=cp437、iocharset=ISO8859-1、shortname=Mixed
,errors=重新安装)
/media/mmcblk1上的/dev/mmcblk1类型:vfat (rw、relatme、fmask=0000、dmask=0000、allow_utime=0022、键盘=cp437、iocharset=ISO8859-1、shortname=Mixed
,errors=重新安装)
在低于打印速度的运行时间从系统中删除 MMC2后、开始出现、并且在系统的最高 CPU 利用率中几乎为100%、
mmcblk1:发送状态命令时出错-110
mmcblk1:发送读/写命令时出错-110、响应0x0、卡状态0x0
mmcblk1:错误-110正在传输数据、扇区229550、nr 32、卡状态0x0
end_request:I/O error、dev mmcblk1、sector 229550
mmcblk1:发送状态命令时出错-110
mmcblk1:发送读/写命令时出错-110、响应0x0、卡状态0x0
mmcblk1:错误-110正在传输数据、扇区229551、nr 31、卡状态0x0
end_request:I/O error、dev mmcblk1、sector 229551
此外、/dev/mmcblk1也不会被删除。
在低于打印速度的运行时间从系统中删除 MMC1后、开始出现、并且在系统的最高 CPU 利用率中几乎为100%、
mmcblk0:发送状态命令时出错-110
mmcblk0:发送读/写命令时出错-110、响应0x0、卡状态0x0
mmcblk0:错误-110正在传输数据、扇区5942094、nr 128、卡状态0x0
mmcblk0:错误-110请求状态
end_request:I/O error、dev mmcblk0、扇区5942094
end_request:I/O error、dev mmcblk0、扇区5942102
此外、/dev/mmcblk0也不会被删除。
让我知道它发生了什么错误。
[引用 USER="Ravi Bhuva]MMMC-1:
MUX_VAL (PINCNTL72,(IEN | IPU | FCN7))/* SD0_SDCD */\
MMC-2:
MUX_VAL (PINCNTL80,(IEN | IPU | FCN2))/* SD1_SDCD */\[/引述]
[引用 user="Ravi Bhuva]OMA_mux_init_signal ("uart0_CTSN.mmc0_sdcd"、
您仍在使用 sdx_sdcd 信号而不是 GPIO。
此致、
帕维尔
您好、Pavel、
我的系统中有两个 SD 卡。 我不想使用外部 GPIO 进行卡检测、我只想使用内置 CD 引脚。
它是具有以下 MUX 的 MMC1、
omap_mux_init_signal ("uart0_CTSN.mmc0_sdcd"、
该引脚没有任何 GPIO MUX 功能。
_TI814X_MUXENTRY (UART0_CTSN、0、
"uart0_CTSN"、"uart4_RxD_mux3"、NULL、"dcan1_TX"、
"SPI1_CS3"、NULL、"mmc0_sdcd"、NULL、NULL、 空、空、
null)、
我们在外部提供了 GP1[15]、但如果所有引脚都只能使用 CD 引脚、我们将删除它、因此我不在这里使用此引脚。 此外、我还将 GP1[15]引脚多路复用器保持如下、
MUX_VAL (PINCNTL121,(IEN | IPU |禁用))/* SAFE_MODE */\
此外、我还有具有以下配置的 mmc2、
返回 OMAP-mux_init_signal ("spi0_CS1.GPIO1_6"、TI814X_PIN_INPUT_PULL_UP);
MMC2仍然不能用于热插拔功能。
如果我们有任何断开连接、请告诉我。
您好、Pavel、
通过提供 GPIO、我已经能够获得热插拔功能。 我相信只有 CD 引脚(sdcd 引脚)、我们将无法获得热插拔功能。
现在只有一个问题、如果我从硬件上移除 CD 引脚(sdcd 引脚)、它不会影响任何功能丢失。 (GPIO 已连接、我已在板级配置文件中为它们提供了 MMC 结构)
此致、
Ravi Bhuva。