因为英文不好,所以只能中文来描述问题。
本人制作了imx6q的核心板,使用的是emmc5.1的芯片,VCCQ和VCC都是3.3V。在实际的测试中发现,只有当imx6q的emmc时钟是13M,系统才能正常启动、读写。如果大于13M,则读写的时候会提示错误。
首先我们排除内核的问题,我们有一块一模一样的6Q核心板,emmc也是同一型号的,但是是其他公司制作的,我们的内核能够正常运行。
回到我们自己制作的核心板,用高速示波器测试发现,在启动阶段mmc时钟400K的电平是3.3V,但是随着初始化结束,mmc的频率提高到13M或者更高,则3.3v会降低到2.0V,从测试结果来看,频率越快,电压降低的幅度越大。以下是我们的原理图,我们更换过clk和cmd上的电阻,但是无效。
所以我们想知道,电压幅值降低是不是导致mmc无法正常工作的原因?是什么导致了mmc引脚的电压幅值从3.3V降低到2,0v?如果需要其他的额外信息来进行判断,我可以提供图片,希望技术支持和论坛大佬,能够提提意见,非常感谢!
Hi @yacheng_zhang,
I hope you are doing well.
After the voltage drop occurs, does the eMMC initialization completes successfully?
Could you please share the logs when eMMC fails at a frequency greater than 13M?
Thanks & Regards,
Ritesh M Patel
yes,The eMMC initialization completes successful.I can see the emmc information.
When I copy the file, the emmc prompts the following error
What may be the cause of the problem. Is this related to the PCB? We can provide PCB files.
Thank you
硬件设计:
1. 这个不是问题, 但是指出来一下。
VCCQ 没有必要用3.3v, 1.8v 可以支持HS200,HS400 和所有的legacy speed。
也就是说emmc 的IO 用1.8v总是对的。
详见EMMC 的JEDEC spec. bus speed modes 章节
2. 目前的设计最有可能的是,协商成了高速模式。 但是IO 供电是3.3v。 emmc 做了切换,所以会量到一个2.0 的间于3.3v 和1.8v的中间电平。但是你们没有提供有用信息。可以cat /sys/kernel/debug/mmc3/ios
拿到协商后的信息。看工作在什么模式下面。
目前可以在软件上fix 一下模式。 device tree 里面加一下no-1-8-v 。只用legacy speed,i.MX6 也支持到DDR52.
或者 只作为测试 uboot 的bootargs 加 sdhci.debug_quirks2=0x4 的 no 1v8 的 quirks
你好,非常感谢你的回答!
1.我们的核心版参考了其他厂家的硬件设计,vccq使用3.3V,因为我们不需要高速模式.
2.查看设备树配置如下,已经默认添加no-1-8-v,具体参数如下
3.通过查看 /sys/kernel/debug/mmc3/ios,具体如下,可以看到协商成ddr52,这是我想要的模式;时钟之所以是40M,是我修改内核代码,手动改成40M.
请问我的参数,哪里可能存在不正常的地方?谢谢
Hi @yacheng_zhang,
One should not manually change or hardcode the eMMC clock. One can specify the speed mode supported in the device tree using various device tree bindings.
Thanks & Regards,
Ritesh M Patel
1. 如前面的说的。 不管高速低俗1.8v 都是正确的电压。而且不是不要高速用3.3v。当然可以省一个电压。
2. 看log的error 要详细看一下layout的等长± 50 mils。 和50ohm 阻抗匹配。
3. 要降频也不用去代码。只要在device tree 里面写上 max-frequency = <26000000>; 硬改代码会带来不必要的,和连自己都不知道的副作用。
4. 可以试试4bit mode,但是还是要先检查一下等长和阻抗匹配。
5. 可以调整一下 clock 上的串阻, 如果data上有也可以调整。
好的,非常感谢您的建议!
1.我们试过用4bit的方式来读写emmc,如果emmc时钟大于13M,仍然会提示错误.
2.可以确定,我们pcb布线的时候数据线都是等长的;且制板的时候已经向板厂交代阻抗匹配相关信息.但是具体的阻抗参数,我们没有专用的仪器可以验证.
3.我们调整过原理图上data,cmd,clk上的电阻,不管是调大或者调小,但是都无效.
1. 可以去问一下emmc 厂家dual voltage (1.8v/3.3v) 那个VCCQ 在3.3v 时候要不要接。或者仔细看一下emmc的手册。
2. 如果可以rework 板子。 吧VCCQ 改成1.8v
3. 波形量一下 不过意义不大。 因为你说 高速时候3.3v 降到了2.0v。波形应该是不符合要求的。 所以#1 问一下emmc 厂家,3.3v的时候的供电。
1.我们是参考其他的板子,emmc型号一模一样的,原理图一模一样,其他板子用同样的代码能够正常运行.
2.有考虑过vccq的问题,我们尝试将3.3V的vccq调整到1.8V,emmc的时钟可以到达40M,读写都是没问题,但是不能到达52M;但是示波器看波形也不太好,测量的时候非常容易受干扰.看手册,vccq关系到emmc的io电压,emmc从3.3V降到2V,这个2v对于1.8V来说,就是有效电压1.2V对于3.3v来说,其实是0电平.
那除了layout ,pcb的板材,制程。没有其他原因了。