CamWen

CamWen

0个粉丝

9

问答

0

专栏

0

资料

CamWen  发布于  2019-12-24 14:56:53
采纳率 0%
9个问答
2881

hi3519a的SD卡无法识别

 
我在使用hi3519a这款芯片,现在板上的SD卡一直识别不到,不是型号无法识别,是热插拔信号都识别不到,但是使用GPIO的方式,可以读取到热插拔引脚的电平是有变化的,查看sys/class下,也是有mmc注册了,现在不确定是不是我的SDK的kerne里driverl或者dts有问题。
有坛友可以帮忙解答下吗?多谢了。
或者能共享一下kernel里mmc的driver以及板卡的dts也好,非常感谢。
我来回答
回答7个
时间排序
认可量排序

goodman

2个粉丝

30

问答

18

专栏

17

资料

goodman 2019-12-24 15:05:57
认可0
1.首先要检查下管脚复用对不对
2.检查内核里面的mmc驱动有没有打开
3.加打印信息,probe里面

CamWen

0个粉丝

9

问答

0

专栏

0

资料

CamWen 2019-12-24 15:22:59
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=151737&ptid=77160]goodman 发表于 2019-12-24 15:05[/url]
1.首先要检查下管脚复用对不对
2.检查内核里面的mmc驱动有没有打开
3.加打印信息,probe里面[/quote]

版主你好;
1.管脚复用:系统启动后,我查看gpio的复用寄存器,仍然还是GPIO功能,没有复用成SDIO的,然后我在启动脚本里,对gpio进行了SDIO复用的设置,但是仍然SD卡没得反应;
2.内核里的MMC驱动应该是打开了,我检查了内核的menuconfig,然后系统启动后也在 /sys/class/mmc下有设备,且设备的基地址的确是0x040C_0000,这个和设备树的配置以及数据手册是能对应上的;

3.我正在加打印信息,正在看代码
我现在跟踪到的是 dts匹配的是 (compatible = "hisi-sdhci";)这个驱动,然后我再kernel找到这个驱动 (\Hi3519AV100_SDK_V2.0.1.0\osdrv\opensource\kernel\linux-4.9.y\drivers\mmc\host\sdhci-hisi.c),这里根据宏定义(CONFIG_ARCH_HI3559AV100)使用了平台相关的文件 (sdhci-hi3519av100.c)空的,实际再次调用(sdhci-hi3556av100.c);
在这些文件里并没有发现和hi3519av100的SDIO的gpio复用配置相关的代码,sd_detecd也没有平台对应的实现;
kernel的代码跟踪当前是这样了;
我不确定是不是需要在kernel里自己去实现hi3519av100平台相关的操作,还是说我拿到的sdk不太对;
请版主多多指教,多谢了。

UncleRoderick

28个粉丝

14

问答

1

专栏

14

资料

UncleRoderick 2019-12-24 17:55:36
认可0
管脚复用在UBOOT EXCEL表格里面进行配置试试

CamWen

0个粉丝

9

问答

0

专栏

0

资料

CamWen 2019-12-24 18:50:53
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=151751&ptid=77160]qn1517131020 发表于 2019-12-24 17:55[/url]
管脚复用在UBOOT EXCEL表格里面进行配置试试[/quote]

你好,非常感谢你的回复;
我按照你的方法进行了尝试,的确SDIO复用正常了,对热插拔信号有反应;
但是现在还存在问题:
热拔插产生中断后,kernel调用的detec函数后后续操作不是对应hi3519a平台的,没能正确的读取卡的信息;
我的kernel里,mmc的驱动可能不对,根据dts,适配到了host\sdhci-hisi.c这个驱动去了,而这个驱动里,对于hi3519av100平台部分的代码(sdhci-hi3519av100.c是空的),是用的hi3556av100的(sdhci-hi3556av100.c),请问你那边是否是这样的情况呢?
请多多指教,多谢了。

CamWen

0个粉丝

9

问答

0

专栏

0

资料

CamWen 2019-12-24 19:53:37
认可0
现在的情况是这样,SD卡的插拔有响应,但是无法正常获取卡的信息,打印信息如下
[code][sdhci_get_cd@1869] return[0]
[sdhci_get_cd@1868] addr[24], val[3120000], bit[10000]
[sdhci_get_cd@1869] return[0]

/opt/debug_tools/bin #
/opt/debug_tools/bin #
/opt/debug_tools/bin #
/opt/debug_tools/bin #
/opt/debug_tools/bin #
/opt/debug_tools/bin #
/opt/debug_tools/bin #
/opt/debug_tools/bin #
/opt/debug_tools/bin #
/opt/debug_tools/bin # [sdhci_get_cd@1868] addr[24], val[3170000], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[3170000], bit[10000]
[sdhci_get_cd@1869] return[1]
mmc0: mmc_rescan_try_freq: trying to init card at 400000 Hz
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_set_card_detection@122] in
mmc0: mmc_rescan_try_freq: trying to init card at 300000 Hz
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_set_card_detection@122] in
mmc0: mmc_rescan_try_freq: trying to init card at 200000 Hz
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_set_card_detection@122] in
mmc0: mmc_rescan_try_freq: trying to init card at 100000 Hz
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_get_cd@1868] addr[24], val[20700f0], bit[10000]
[sdhci_get_cd@1869] return[1]
[sdhci_set_card_detection@122] in[/code]
这个是首先拔卡,然后插卡产生的打印信息,我给热插拔读取寄存器加了一些打印信息;
我在uboot的excel里对以下引脚做了复用配置
[code]IOCFG_REG115        0x47e0064        0xf1        0        write        31        0        0x0000000FD
IOCFG_REG116        0x47e0068        0x10f1        0        write        31        0        0x0000000FD
IOCFG_REG117        0x47e006C        0x21        0        write        31        0        0x0000000FD
IOCFG_REG118        0x47e0070        0x21        0        write        31        0        0x0000000FD
IOCFG_REG119        0x47e0074        0x21        0        write        31        0        0x0000000FD
IOCFG_REG120        0x47e0078        0x21        0        write        31        0        0x0000000FD
IOCFG_REG121        0x47e007C        0x21        0        write        31        0        0x0000000FD
IOCFG_REG122        0x47e0080        0x21        0        write        31        0        0x0000000FD
[/code]
包含了
SDIO0_POWER_EN、SDIO0_CARD_DETECT、SDIO0_CCLK_OUT、SDIO0_CCMD、SDIO0_CDATA0、SDIO0_CDATA1、SDIO0_CDATA2、SDIO0_CDATA3
这些引脚,不确定是否还有所遗漏;

CamWen

0个粉丝

9

问答

0

专栏

0

资料

CamWen 2019-12-24 20:52:38
认可0
示波器测量信号,发现CCMD、CDATA0-3引脚信号被拉低
修改uboot-excel配置如下
[code]IOCFG_REG115        0x47e0064        0xf1        0        write        31        0        0x0000000FD
IOCFG_REG116        0x47e0068        0x10f1        0        write        31        0        0x0000000FD
IOCFG_REG117        0x47e006C        0x21        0        write        31        0        0x0000000FD
IOCFG_REG118        0x47e0070        0x121        0        write        31        0        0x0000000FD
IOCFG_REG119        0x47e0074        0x1121        0        write        31        0        0x0000000FD
IOCFG_REG120        0x47e0078        0x1121        0        write        31        0        0x0000000FD
IOCFG_REG121        0x47e007C        0x1121        0        write        31        0        0x0000000FD
IOCFG_REG122        0x47e0080        0x1121        0        write        31        0        0x0000000FD
[/code]
当前可以测量到正常的波形,但是SD卡仍然无法识别到,打印信息和上一回复一致。

CamWen

0个粉丝

9

问答

0

专栏

0

资料

CamWen 2019-12-24 21:01:54
认可0
完成调试,最终修改excel配置如下,原因是没考虑到ccmd也是双向的
[code]IOCFG_REG115        0x47e0064        0xf1        0        write        31        0        0x0000000FD
IOCFG_REG116        0x47e0068        0x10f1        0        write        31        0        0x0000000FD
IOCFG_REG117        0x47e006C        0x21        0        write        31        0        0x0000000FD
IOCFG_REG118        0x47e0070        0x1121        0        write        31        0        0x0000000FD
IOCFG_REG119        0x47e0074        0x1121        0        write        31        0        0x0000000FD
IOCFG_REG120        0x47e0078        0x1121        0        write        31        0        0x0000000FD
IOCFG_REG121        0x47e007C        0x1121        0        write        31        0        0x0000000FD
IOCFG_REG122        0x47e0080        0x1121        0        write        31        0        0x0000000FD
[/code]
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
相关问答
无更多相似问答 去提问
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区