我使用rt1052外接两片sdram,其中一片用cs0片选引脚,另外一片用csx0片选引脚,其余引脚并联,但是只有cs0这一片能正常工作,另外一片数据读写失败,请问关于外接两片sdram有什么注意事项和解决方案么,
我的重要配置如下
引脚配置
IOMUXC_SetPinConfig(IOMUXC_GPIO_EMC_41_SEMC_CSX00, SDRAM_PAD_CONFIG_DATA);
IOMUXC_SetPinMux(IOMUXC_GPIO_EMC_41_SEMC_CSX00, 0U);
semc配置
semc_config_t config;
memset(&config, 0, sizeof(semc_config_t));
SEMC_GetDefaultConfig(&config);
config.dqsMode = kSEMC_Loopbackdqspad;
SEMC_Init(SEMC, &config);
sdram配置
sdramconfig.csxPinMux = kSEMC_MUXCSX0;
sdramconfig.address = 0x82000000;
SEMC_ConfigureSDRAM(SEMC, kSEMC_SDRAM_CS1, &sdramconfig, clockFrq);
Hi,
非常感谢使用NXP产品,很高兴为你提供技术支持!
在给出相应的建议之前,我想了解更多关于问题的情况,比如SDRAM的连接的原理图,你所说“另外一片数据读写失败”,能否再解释一下,比如具体指什么操作,错误表现是什么等。
Have a great day,
TIC
-------------------------------------------------------------------------------
Note:
- If this post answers your question, please click the "Mark Correct" button. Thank you!
- We are following threads for 7 weeks after the last post, later replies are ignored
Please open a new thread and refer to the closed one, if you have a related question at a later point in time.
-------------------------------------------------------------------------------
Hi,
我已提供的新的消息
感谢您的回复
这是我RT1052与两片sdram的连接方式图,除了片选(chip select)是连接到soc不同的管脚外,其余全部为并联方式,我的目的是使用两片16位32MB的sdram扩展内存,采用不同的片选来访问不同的内存地址域,值得一提的是有一下几点,
1:单独初始化一片内存,并且是使用的cs0时,这片内存是正常的,可以读写数据,并且读写的数据是正确无误的,其中的片选信号用示波器观察如下图(空闲状态,没有进行读写数据),并且为了下文更好的描述,我们称这个图片为 图1
图1
2:我完全确保我的硬件是没有短路、断路的
当我配置第二片内存时,我发现在csx0、csx1、csx2、csx3,和semc_rdy引脚中,唯独使用semc_rdy能够成功驱动第二片内存,也就是第二片内存的片选信号能出现图1的波形,使用csx0、1、2、3这些引脚时,不会出现图1的波形,也就不能在第二片内存中读写数据。我想知道,为什么我使用csx0、1、2、3这些引脚会失败,我配置的流程和使用semc_rdy的配置流程是一样的,用semc_rdy却是成功的,难道使用csx0、1、2、3还有额外的配置项么,我在mcuxpresso config tool生成的配置semc外设代码时,使用csx0、1、2、3以及semc_rdy流程是一样的,很是疑惑,请问我该怎么配置才可以使用csx0、1、2、3来作为sdram的片选,手册里说这样最多可以配4个
关于您对我的“读写失败”的疑问,我是这么操作的,在内存中,分别以8位、16位、32位进行全片写操作,再去全片读,如果读的内容和写的内容一样,就视为配置成功,能够使用,如果读的内容不正确,我视为“读写失败”
另外,在semc_rdy作为第二片内存时,虽然两片sdram都正常,但是我使用示波器观察到片选信号貌似有点异常,请您帮我看看是否这样是正常现象。代码流程如下:当配置完两片sdram时,代码开始对第一片sdram读写检查,以确认第一片是正常的,再对第二篇内存开始读写检查,以确认第二片内存是正常的
当对第一篇内存检查时,第一片内存有数据的读写,这内存的片选比图1更丰富,第二片内存的片选应该如图1一样经行自刷新或者其他操作(空闲状态,没有数据读写),但是实测貌似第二片内存片选比空闲时候要活跃很多。如下图,黄色是cs0 片选,紫色位semc_rdy片选
当对第二片内存检查时,第二片内存有数据的读写,第二片内存的片选波形比图1丰富,第一篇内存此时空闲波形应该是图1,如下图,这个波形正常
当测试完毕后均为空闲,这也是正常的 ,如下图
红色字体为我急需您帮我解答和解决的内容
best
qingfeng
Hi,
感谢回复
1)请问我该怎么配置才可以使用csx0、1、2、3来作为sdram的片选,手册里说这样最多可以配4个
-- 首先,你说的现象很奇怪,照道理它们都可以作为片选信号,你有查看过对应的寄存器配置是否如预期一样。
2)应该时正常现象,SEMC需要维护另一个SDRAM也要处于activate状态。
3)我有个疑问,你的测试代码本身是在内部RAM运行的,对吧?
Have a great day,
TIC
-------------------------------------------------------------------------------
Note:
- If this post answers your question, please click the "Mark Correct" button. Thank you!
- We are following threads for 7 weeks after the last post, later replies are ignored
Please open a new thread and refer to the closed one, if you have a related question at a later point in time.
-------------------------------------------------------------------------------
Hi
1):我的代码保存于spi flash,运行于spi flash,ram使用DTCM
2):我几乎无法验证寄存器配置,因为1:我无法得知某个库函数配置了哪些寄存器,2:就算我用调试器等等列出所有寄存器信息我无法得知需要这个功能对应配置寄存器是否有遗漏。我的做法是使用mcuxpresso config tool来配置外设,根据生成的代码来做稍微修改。代码的重点部分在我向您第一次咨询时的消息中已列出
3):我想问一下基于嵌入式最底层的外设功能开发,有以下两个痛点
1:在参考手册中全面详细的介绍了各个外设的全部功能,当用户使用寄存器(不使用库函数)开发某个功能时,只能看寄存器的描述,看到了某个功能需要配置就配置一下,也许某些重要的参数或者功能也需要配置或者可以配置,用户很容易遗漏,你们有这个手册或者资料吗,比如针对soc的各个外设,需要某个功能,会有全面的系统的说明需要哪些寄存器参与配置,再结合参考手册里面的寄存器说明,很轻松全面的使用soc各个外设的各个功能
2:在参考手册中全面详细的介绍了各个外设的全部功能,当用户使用库函数开发某个功能时,只能看mcuxpresso config tool或者driver examples,driver examples并不完全的列出的所有外设的所有功能,如果用户需要其他功能,没有配套的说明指出soc某个功能需要哪些库函数一同来配置,有个库函数 api的手册,我觉的说的不是很详细,和数据参考手册的关联性不大,比如我配置两个sdram,cs配置就需要在结构体里csxPinMux指定是XXX对应硬件管脚XXX,在SEMC_ConfigureSDRAM配置中指定是哪个region,但api手册只告诉我有csxPinMux和SEMC_ConfigureSDRAM,我并不知道这其实是配置sdram 的sc,是必要的步骤
这两个痛点,直白一点就是参考手册里soc外设的各个的功能,没有说明某一外设的某个功能需要哪些寄存器配合来配置,或者需要哪些库函数配合来设置,因此大部分人都依赖野火或者正点原子这些第三方机构的教程,第三方机构也是花大量时间看参考手册,然后看你们的driver example再总结出来给我们看。这些教程也无法避免不全面,如果需要用户自己全面看参考手册看driver example再自己总结,这就对芯片的使用带来很大的时间和体验感,也正是这两个痛点我无法分析寄存器是否和预期一样,因为我很难得知或者需要花巨大的时间精力去弄明白预期本来应该是什么样的,我的办法就是通过mcuxpresso config tool配置某个外设,然后去修改,mcuxpresso config tool也无法避免有soc外设的功能没有列出配置。我不知道是否你们有解决这两个痛点的资料是我没发现,还是没有这些资料,针对我觉得这两个痛点,使用nxp的芯片有什么能为我提供帮助的地方吗
这个痛点的咨询和sdram cs片选不能正常工作两个问题都需要您的帮助
best
QingFeng
Hi,
1) 参考手册已经是关于芯片最全面的介绍文档了,但是也不可能全面的介绍每一个模块的每一种应用,一般都是介绍几个最常用的应用,像RT MCU的参考手册现在都是2000页起步了,如果每一种应用都要介绍,你有没有想过这会增加多少页数,至少我没看到有芯片原厂这么干的, 总之一句话,没有什么武功秘籍,一看就会的,嵌入式知识本身就杂,需要很多时间投入的。
2)野火,正点原子,周立功等第三方的教程,我个人觉得挺好,首先至少资料是中文的,利于初学者快速上手,有些还做了一些内容扩展,方便学习。但是不能契合真正真正开发过程中会遇到的问题。真正开发过程中,时间有限,只关注自己用到的模块,一般先通过driver熟悉模块基本功能,遇到难缠的问题,查看RM线索,不能解决再找原厂工程师。
3)至于你上面的问题,你给出的代码是没有问题,但是代码执行是否如预期就需要在debug的时候查看寄存器配置了,芯片原厂提供很多工具让开发者在不是很了解芯片的同时,可以帮助快速配置模块,但这里面隐藏很多模块的细节,在出现问题的时候,也需要工程师自己去抽丝剥茧发现问题。
BR,
Jeremy