问题一:
Q: SD卡发现发送数据没有应答
A: 最终发现是SD卡的模型未连接到版本中
问题二:
Q: SD卡模型收到波形,但是无应答
A: 原因是因为sd_card_insert 信号极性有问题,导致模型sd卡未工作
问题三:
Q: SD卡模式,发送CMD11进行电压切换,发现sd卡信号提前拉高命令切换失败
A: 原因是由于软件的内存越界导致的问题
问题四:
Q: SD卡模式,读SCR寄存器或者读512byte的数据,会出现DATA3没有变化,且不产生传输中断完成信号
A: 由于DATA3脚和sd看的检测脚复用,默认被上拉导致一直为高电平,解决方法是emu配置修改为1,或者软件强制发送CMD42命令强制拉低
问题五:
Q:软件流程提示sd卡tuning不成功
A:原因是默认sd卡模型没有tune数据,需要手动加载tune.hex到模型中
1、芯片更新版本
2、tcl脚本中souce加载tune.hex脚本
memory -load %readmemh u_sd_card.dut.tune_pattern -file ./script/tune_sd.hex
问题六:
Q: emmc发送CMD1命令,反馈失败,芯片的response中反馈芯片初始化不成功或者busy
A: 原因是由于模型的emmc_int_clk 没有给时钟导致的
芯片更新版本后强制给一个1M的clk后正常
问题七:
Q: emmc 读CSD控制寄存器失败
A: 代码流程发现系统不支持高速模式,分析发现是有CSD控制寄存器中196byte为0导致
通过分析文档发现CSD寄存器需要模型手动初始化才行
问题八:
Q:
CSD控制寄存器部分字节初始化不成功
测试代码发现CSD控制寄存器的第186字节为0,与实际不符合,但是CSD脚本中为1,
对比分析,大部分内容和脚本一致,但是部分内容不正确
A:
分析发现CSD扩展寄存器第186byte之所以和脚本不一样,是由于模块复位后会把emmc_reset脚拉低,这个动作会导致改bit为0,通过force的方式可以规避解决
force u_emmc.inst.ext_csd_strobe_support 1'b1
问题九:
Q: EMMC的DDR模式读数据反馈CRC出错
A:
在模型的手册中可以发现,需要模型的版本添加对应的宏定义才能够正确采样到波形,添加宏定义,重新做版本后,验证正常
问题十:
Q: hs400_es 发送命令没有收到dqs信号
在hs400_es模式下,目前发现芯片发送cmd24后,cmd脚有应答,但是没有对应的dqs信号,导致芯片无法采样到cmd的应答,从而包cmd timeout的错误
A:
前经过分析发现emmc模型的ext_csd[183]bit7 无法置1,应该是这个原因导致cmd 的response没有storbe信号的
更新cadence给的模型后(模型bug),验证正常。
问题十一:
Q: emmc的CQ中断测试失败
软件打印在CQ门限为1的时候中断counter值为2,理论应该为8,所以报错测试失败
A: 通过抓emu的波形以及软件添加打印,
1、CQ中断门限功能正常,门限为1的时候中断线有8次变化,门限为4的时候中断线有2次变化
2、软件的counter打印为2的原因是中断处理函数在退出前会判断当前是否还有未处理的中断,如果有则继续执行而不退出。但是counter是在中断退出后自加的,所以导致门限为1的时候,counter只有2次变化。
问题十二:
Q: SD卡在emu linux中DDR50模式下写正常,读异常
SD卡在emu linux中DDR50模式下写正常,读异常
通过分析波形以及相关寄存器,异常原因是由于 DATA CRC 导致的,初步怀疑和phy参数有关系,需要罗林抓内部信号进行分析
A:
通过技术支持更新模型,添加clk和data的相位偏移后,刘新编译新的版本,软件测试正常
问题十三:
Q: sd/emmc在emu linux中读写boot0/boot1分区对比失败
sd/emmc在emu linux中读写boot0/boot1分区对比失败
1、写的数据和读出来的数据不一致
2、每次读数据发现数据是一样的
3、必先,并且软件没有报错,srs12寄存器也是正常
A:
emu上boot0和boot1分区的大小端有问题,导致写进去和读出来的数据不正常,
技术支持发布新的模型,重新制作新的的版本后测试正常。
问题十四:
Q:
如果sd卡和emmc同时使能clk和释放复位,再去访问sd卡寄存器,可以正常访问
但是单独使能sd卡的clk和释放复位,无法访问sd卡寄存器
A:
sd卡和emmc的apb decode中cgmen信号接反