打印

SDRAM在GD32F450Z和STM32F429上面的应用

[复制链接]
11173|47
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
从2000年玩电脑的时候开始,对CPU频率的追求,对内存和硬盘容量的最求一直都没有停止过。第一台电脑用的赛扬566CPU+64M内存+10G硬盘,一直玩到现在3G赫兹CPU+16G内存+2T硬盘。内存也从SDRAM---DDR---DDR2---DDR3......。
现在玩单片机也从51的128Byte,到AVR-Mega8的1k,Mega128的4k,到STM32F103C8的20k,再到STM32F407ZE的192k+FSMC外扩1M的RAM,然后头脑发热买了个STM32F429ZI-DISC1开发板的外扩8MByte,SDRAM,最后就是目前用的GD32F450Z外扩64MByte,SDRAM。
内存大了以后能在USB,网络,文件系统,图像处理等一些应用上面做更多的事情,这也就是我为啥要学SDRAM的动力。
SDRAM确实比SRAM的使用麻烦的太多了,也幸好买了STM32F429ZI-DISC1开发板,比自制板要少走很多弯路。为啥这样说呢?因为在网络上太多人说STM32F429的SDRAM控制器是个坑的论调,却从来不考虑是不是自己水平不够才出现的软硬件问题,这里主要是硬件问题,直接说就是自己PCB板绘制水平在高频应用中出现问题。

该板子配置如下
1.  2M的Flash。
2.  一个USB OTG FS,一个USB OTG FS/HS,可以同时连接U盘和上位机
3.  有LCD-TFT控制器,可以直接驱动液晶屏,不过需要扩展SDRAM作为显存,可以支持到32位色1024*768分辨率
4.  支持扩展SDRAM,作为显存和通用内存,开发板上是8M字节的SDRAM,型号为IS42S16400。

如图配置,生成程序就行。
注意一点是,CUBEMX生成的程序只是对MCU芯片内部的SDRAM控制和时序寄存器进行了初始化,对SDRAM芯片内部的控制寄存器另外需要初始化。可能很多人不知道SDRAM内部本身是有控制器的,需要对其进行设置才能正常工作,这也是SDRAM比SRAM应用麻烦的地方。
对SDRAM的操作网络上介绍的很多,这里就不啰嗦,上传一个附件大家看看。
高手进阶,终极内存技术指南——完整.zip (1.39 MB)

评论
FAQ 2022-4-20 18:42 回复TA
我做了块SDRAM板子,程序整体功能有异常,调试了好长时间一直搞不好,我一开始并不怀疑我的板子硬件有问题,一直认为是软件问题,后来看了网上的帖子,越看越怀疑会不会是我板子画的不行,差点去重新画板子,后来在自己的努力下终于还是搞定了,最终发现还是软件问题。看了网的评论甚至一度误导我以为是硬件问题。浪费了我好长时间。 
评分
参与人数 1威望 +3 收起 理由
moticsoft + 3
沙发
whtwhtw|  楼主 | 2017-6-3 10:44 | 只看该作者
本帖最后由 whtwhtw 于 2017-6-3 15:46 编辑

下面开始放大招GD32F450+64M的SDRAM
当当当当。。。。。。。

大名鼎鼎的GD32F450ZGT6,144Pin,与目前大家活动或者买的GD32F450开发板的450不一样哦,大一圈。



K4S511632C-64M-SDRAM,三星的SDRAM芯片



组合到一块的板子。。。。。
有人说了,这能跑吗?其实我也怀疑,因为连万能的某宝都买不来GD32F450ZG或者STM32F429Z的板子,自己又懒得画板,先试试看吧。

为啥内存芯片上前后那么多大小电容。。。。。。。额,说到痛处了,徒弟。。。给师傅端杯水,,压压惊。。。。。。。。

其实大家看看SDRAM芯片下面还有个插槽,那个是插上一任SDRAM转接卡的,万能板+全手工焊接的SDRAM,为师焊了2天,用放大镜看着焊,眼都焊瞎了一只,发誓再也不手工焊这么多脚的芯片了。并且伤心的是。。。。还不管用。。。。由于管脚间距太小,放大镜看着眼疼,蛋也疼,算了,买了个芯片转接板吧,这才是目前的状态。
但是。。。但是。。。初始化是通过了,也可以读写,测试都没问题,但是全片写-读检测时候总有部分区域的数据不对,难道SDRAM对能耗要求太高?加电解电容,不行;难道SDRAM对电源纹波要求很高?,加104,加101,还不行。从90M,降到80M,66M,60M,再低。。。虽然频率降低能有所改观,但是一直避免不了出错。
没法,查查网络吧。不查不知道,一查吓一跳,好多读写数据错误的,对STM32F429也多有诟病。操作SDRAM真不容易

使用特权

评论回复
板凳
whtwhtw|  楼主 | 2017-6-3 10:58 | 只看该作者
本帖最后由 whtwhtw 于 2017-6-3 15:46 编辑

看到其中一篇网文说他的板子也出现读写错误,怕是走线不好,因此把MCU与SDRAM之间的时钟线割开,用导线直接连接后改善很多的介绍,灵机一动,我的是不是也是这个问题?
看看网上怎么说?
网文一:

参考君正给的参考设计发现其在SDRAM的地址线源端串联了一个33欧电阻。显然,这33欧电阻是用来做阻抗匹配的。


问:参考设计所说的60欧的阻抗包不包括这33欧电阻呢?
答:这个60欧的阻抗应该是传输线的特征阻抗,不包括33欧姆电阻。那个电阻是去振铃的,但振铃就是阻抗不匹配造成的,匹配了就没振铃了。


问:用串联电阻做阻抗匹配的话,还需不需要计算走线的阻抗?还是说两者都需要?
答:DRAM Layout时第一就要保证走线的阻抗,例如 DDR的数据线保证特征阻抗为50-60欧姆,差分信号线为100-120欧姆。
如果不加串联电阻,其实大多数情况下,也可以正常跑起来。但是,为了可靠性来讲,并不建议这样做。
如果在在DRAM的端口串联一个电阻,可以使DRAM端口的输出阻抗加上这个串联电阻阻抗等于传输线的特征阻抗,简单的说这样可以有效的避免信号反射,提高可靠性。


问:如果我用POLAR计算得传输线的阻抗为87欧,DRAM端口的输出阻抗为22欧,是不是说我只要串联一个65欧的就行?如果这样的话,那么很多书上写的:传输线阻抗为50欧是什么意思呢?
是的,加入电阻式串行匹配的一种方式。
传输线阻抗为50欧是这个意思:在信号的传输过程中,在信号沿到达的地方,信号线和参考平面(电源平面或地平面)之间由于电场的建立,就会产生一个瞬间的电流,如果传输线是各向同性的,那么只要信号在传输,就会始终存在一个电流I,而如果信号的输出电平为V,则在信号传输过程中(注意是传输过程中),传输线就会等效成一个电阻,大小为V/I,我们把这个等效的电阻称为传输线的特征阻抗Z。要格外注意的是,这个特征阻抗是对交流(AC)信号而言的,对直流(DC)信号,传输线的电阻并不是Z,而是远小于这个值。举例:50欧姆就是这个Z。



问:2层板怎么解决阻抗问题?

阻抗控制是要有参考层的(就是所谓的地或电源层),需要参考层没问题,但参考层可以和信号线在同一面,叫Coplanar Strip。不过这个对布线要求更高,弄起来更麻烦。
两层板的阻抗控制比较累吧,如果底层敷地的话容易产生阻抗不连续 !双面板阻抗控制的问题是50欧姆线太宽了。如果偶尔需要,不太关键的信号,可以用coplanar凑合一段。

2层板不考虑阻抗,运气好也跑得起来,但是稳定性不敢说。玩玩可以,做产品不要这样。
高频的东西,该遵守的规则还是要遵守。


问:如果sdram布线的时候不考虑阻抗会怎么样?(也就是说直接串个33欧的电阻,不考虑做阻抗板)
使dram端口的输出阻抗加上这个串联电阻阻抗等于传输线的特征阻抗。如果频率不高,线又很短不考虑阻抗也可以。

问:“如果线小于6inch的话是可以不考虑阻抗,只要差不多就行了”,请问是不是有这一说法???
线路的阻抗匹配,在高频上主要是看这段线是否要被视为传输线。是否视为传输线和这段线的尺寸及主要的信号波长相关。
有的说法是,长度是波长的1/20以下,传输时间是上升沿的多少分之一,还有个什么条件,满足了就可以认为是集总参数的较为理想的线,不太用管阻抗了。此时,如果条件许可,尽量匹配阻抗也是有好处的,减小反射。


问:pcb走线相对于高频信号有一个特征阻抗,串接进去的电阻怎么相对于高频就按其电阻值算呢?电阻相对于高频的特征阻抗难道就是其阻值吗?

我的理解是…要是做匹配的话…假如你设计的传输线50欧的…但是器件的阻抗实际上并不都是能与50欧传输线匹配的…而且还经常有各种拓扑结构…所以在终端接上器件就没办法匹配…出现瞬间阻抗不连续…引起反射…所以必须找一个外部的办法让器件与传输线匹配…其中之一就是串接一个电阻…让电阻和器件一起得到的阻抗与传输线匹配…这样就能实现消除反射了…这个电阻是把传输线看成50欧的时候器件要与它匹配时候需要的电阻。


实体电阻是集总参数元件,其参数可以用集总RLC的串并联,etc,表示。集总元件表现出来的是其在指定频率下的复数阻抗。一般所说的特征阻抗,是无损传输线的同向行波电压和行波电流比给出的参数,是传输线专有的概念,对集总参数元件不适用。集总参数元件在体积满足足够小的情况下,表现出来的特性就是其复数阻抗。电阻一般就认为是其阻值,LC参数考虑的貌似不多。基本上就是这个意思,元件的参数是元件的;传输线的是传输线的,各算各家。



/***************************************************************************************/


首先要预估走线的长度,所谓传输线(Transmission Line)效应在高速PCB的布线中也不是普遍存在的,一般当走线产生的延迟接近其信号沿变化速度(rise/fall)的1/3(保守按1/3算)时,需要面对传输线效应,采用各种端接(Terminate)的方式实现阻抗匹配加以解决;1/2到1/3之间建议纳入考虑范围;
保守计算:电信号在PCB线路中的传播速度取光速的一半,大约是30cm/ns,反射需要个跑来回,再对折,约15cm/ns;

SDRAM的信号延变化速度大致是1ns,其允许不考虑匹配的延迟范围大致是15cm * 1/3 = 5cm = 1968mil,也就是说走线长度控制在5cm以内就能基本避免传输线效应,而无需端接;实际上放宽到1/2(7.5cm)也没问题;

如果走线长度超过5cm较多,那么再配合PCB的叠层(Stackup)间距,计算走线的阻抗和匹配的电阻值;一般原理图中由于不知道PCB的具体情况,所以都会串或并一些端接电阻的。


使用特权

评论回复
地板
whtwhtw|  楼主 | 2017-6-3 11:01 | 只看该作者
本帖最后由 whtwhtw 于 2017-6-3 11:03 编辑

网文二:
SDRAM是一种同步动态存储器,所有接口信号都是通过时钟同步和采样的。这就对SDRAM的布线提出了要求——保证采样的正确性。于是,应用高速数字电路的知识结合某种具体SDRAM器件和你的PCB进行分析,发现在正常工作频率(如100MHz)下,在PCB走线上的信号传输时间大于其上升时间1/10。于是,接下来考虑高速数字电路两大问题反射和延迟:反射造成 SDRAM时钟线信号出现振铃,多次穿越门限造成误触发;数据线和时钟线的传输延迟不相同,造成时钟上升沿采样不到所需要的数据。接下来应用解决方法:时钟线串联电阻做阻抗匹配;布线时控制数据线和时钟线的长度差在一定范围内。当然,我这里说的是一个很简单的演绎过程,还有拓扑结构、最大布线长度等重要问题没有考虑,请大家仔细阅读我是一只鱼同学刚才推荐的课本。提示下,拓扑结构和最大布线长度的选择可以通过前仿真进行验证。
SDRAM布线方法
1、无所谓在外面还是在内部,都可以,内外走线都要打孔。表层信号紧临地平面就不怕干扰,但要注意外表面空气介电常数不如隔绝空气的内部稳定,在一些湿度,温差大的地方的设备最好走内部,外部走地层,不过这样成本高。

2、等长不是目的,目的是满足建立保持时间,同频同相,采样正确。SDRAM是公共时钟模式,只关心建立时间,不关心保持时间。

SDRAM最高频率可达100M以上,对于SDRAM的数据线、时钟线、片选及其它控制信号需要进行线长匹配,由此提出以下布线要求:
1.SDRAM时钟信号:时钟信号频率较高,为避免传输线效应,按照工作频率达到或超过75MHz时布线长度应在1000mil以内的原则及为避免与相邻信号产生串扰,走线长度不超过1000mil,线宽10mil,内部间距5mil,外部间距30mil,要求差分布线,精确匹配差分对走线,误差允许在20mil以内。
2. 地址、片选及其它控制信号:线宽5mil,外部间距12mil,内部间距10mil,尽量走成菊花链拓补,可有效控制高次谐波干扰,可比时钟线长,但不能短。
3.SDRAM数据线:线宽5mil,内部间距5mil,外部间距8mil,尽量在同一层布线,数据线与时钟线的线长差控制在50mil内。  
4.在重要的控制信号线上一搬串联33的电阻,消除干扰。

使用特权

评论回复
5
whtwhtw|  楼主 | 2017-6-3 11:14 | 只看该作者
本帖最后由 whtwhtw 于 2017-6-3 11:40 编辑

其实不管是等长还是串联电阻,其目的是阻抗匹配。
不匹配会怎么样?会反射,如果反射能量高,后果很严重

反射不太严重的后果



反射波与输入波叠加后,固定频率的波也许就变成这样


仔细查看SDRAM手册后发现一个图,如下

SDRAM数据引脚是50欧姆阻抗,我就用50欧姆阻抗的同轴线试试呗

使用特权

评论回复
6
whtwhtw|  楼主 | 2017-6-3 11:23 | 只看该作者
本帖最后由 whtwhtw 于 2017-6-3 11:28 编辑

因此,某宝

50欧姆的射频同轴电缆,5MM直径,感觉挺细了,拿到手还是感觉太粗。。。,凑合用吧。


把MCU和SDRAM之间的时钟线去掉,换成50欧姆同轴电缆,60M全SDRAM测试通过,90M,没问题,100M,没问题!
110M,仍然没问题;120M,也没问题;125M,又出错了。。。
这样的板子,SDRAM跑到120M,你还想怎样?还想怎样!。。。
SDRAM为系统二分频,此时,系统时钟为240M。。。。
单独测试GD32F450,可以稳定跑到250M,再高频率无法设置了,因为GD32F450倍频最高500,再二分频,最高就是250M。

使用特权

评论回复
7
whtwhtw|  楼主 | 2017-6-3 11:39 | 只看该作者
本帖最后由 whtwhtw 于 2017-6-6 09:36 编辑

附上工程文件吧,有需要的朋友拿去,不要问我叫什么,我是雷锋。


工程中注意一个问题,这里调整系统时钟的时候,同时

在这里调整SDRAM的刷新时间
GD32F450ZGT6-demo.part01.rar (4 MB)
GD32F450ZGT6-demo.part02.rar (1.36 MB)


使用特权

评论回复
评论
whtwhtw 2019-1-8 08:37 回复TA
@aaronyoung:99.9%兼容吧 
aaronyoung 2019-1-7 17:57 回复TA
GD32F450完全兼容STM32F429吗? 
8
戈卫东| | 2017-6-3 11:44 | 只看该作者
加上这么个又粗又黑的电缆
何等的不和谐。。。

使用特权

评论回复
9
戈卫东| | 2017-6-3 11:45 | 只看该作者
其实时钟线和其他信号离开一点应该就可以

使用特权

评论回复
10
whtwhtw|  楼主 | 2017-6-3 14:03 | 只看该作者
戈卫东 发表于 2017-6-3 11:44
加上这么个又粗又黑的电缆
何等的不和谐。。。

那是你没看板子背面,看到会惊呼,和前面何等的不和谐。。。

使用特权

评论回复
11
whtwhtw|  楼主 | 2017-6-5 08:38 | 只看该作者
本帖最后由 whtwhtw 于 2017-6-5 08:40 编辑

网购了5寸IPS高清RGB——TFT,用TLI接口跑跑视频看看,ST叫做LTDC接口。



还是管脚太少,TLI接口和摄像头接口冲突,哎。。。。。。

使用特权

评论回复
12
Prry| | 2017-6-5 10:37 | 只看该作者
LQFP封装一把烙铁走天下,最多焊过208脚的,不用镊子、放大镜什么的。。。

使用特权

评论回复
评论
whtwhtw 2017-6-5 11:15 回复TA
都是过来人啊,更是牛人啊 
13
cruelfox| | 2017-6-5 11:53 | 只看该作者
厉害,洞洞板加转接跑SDRAM.
居然最后一根屏蔽线解决问题。

使用特权

评论回复
14
cruelfox| | 2017-6-5 12:03 | 只看该作者
贴个我做的,两层板 SDRAM



使用特权

评论回复
评论
whtwhtw 2017-6-5 14:40 回复TA
反正是自己用,怎么才8M的SDRAM? 
15
加油吧小鱼儿| | 2017-6-5 12:18 | 只看该作者
强悍~

使用特权

评论回复
16
whtwhtw|  楼主 | 2017-6-5 14:17 | 只看该作者
cruelfox 发表于 2017-6-5 12:03
贴个我做的,两层板 SDRAM

你这SDRAM能跑到多少M频率?网上都推荐4层板以上

使用特权

评论回复
17
whtwhtw|  楼主 | 2017-6-5 14:18 | 只看该作者
STM32单片机 微信号原创**
PCB设计中如何改善SDRAM信号的辐射干扰话题
   前   言
某些使用外置SDRAM 的STM32应用客户反映其产品在EMC测试中,存在由于SDRAM信号导致辐射干扰超标的问题。在终端产品中如果不能用机壳屏蔽辐射干扰,那么这类问题往往需要通过修改SDRAM信号的PCB设计来解决。
这里针对SDRAM的PCB应用设计中如何改善辐射干扰问题做个概述,抛砖引玉,以供参考。

PCB设计中的SDRAM辐射干扰对策
SDRAM由于其工作在较高的频率,具有较陡的上升沿和下降沿,因此在PCB设计中有必要将其信号走线按高速信号传输线来处理,通常要注意下面的一些基本原则:

1.保持SDRAM信号的完整性
SDRAM信号的失真将进一步拓宽信号的辐射频谱,从而带来更严重的辐射问题,因此必须注意SDRAM信号完整性设计。
--- 推荐使用4层或更多层板将SDRAM信号的特性阻抗控制在50欧姆,尽可能减少过孔在SDRAM总线上的使用,保持阻抗的连续性,减少由阻抗不连续导致的信号反射;
--- SDRAM信号走线间距应遵循3W原则,两根走线中心间距尽可能保持至少3倍线宽, 可以减少因为信号间窜扰而导致的信号失真;
--- 尽可能使SDRAM靠近MCU,缩短MCU到SDRAM信号走线的长度(通常不应超过120毫米);

2.保持最短的SDRAM信号回流路径
对于多层PCB来说,高速信号的回流路径就是其走线在参考平面的投影。在PCB设计中,应该注意保持其参考平面的完整连续,如果由于信号换层或电源层分割等原因而导致信号回流路径被切断,必须通过增加换层电容/换层地过孔和电源平面跨接电容等手段确保SDRAM信号有最短的回流路径。

3.将SDRAM信号(特别是时钟信号)布放在PCB的内层
在SDRAM信号中,时钟信号有最强的辐射电平,可以通过将其布放在PCB内层并加以外层地铜箔屏蔽的方法减少其辐射。
对于STM32的FMC接口同时外挂有SDRAM和FLASH的设计,由于SDRAM和FLASH共享了某些MCU管脚,其复杂的走线拓扑结构进一步增强了SDRAM信号的辐射干扰,建议将SDRAM和FLASH的走线都尽可能布放在PCB内层,同时在PCB的外层用地平面对这些信号加以屏蔽。

4.保持SDRAM走线区域与其它信号/线缆尽可能远的距离
较长的其它走线或线缆可以作为天线将耦合的SDRAM辐射信号发送出去,所以应该在PCB中将它们布置在远离SDRAM信号的区域,必要的时候可以在这些走线或线缆连接端放置磁珠或滤波器衰减SDRAM辐射信号。

使用特权

评论回复
18
hameyou| | 2017-6-5 17:45 | 只看该作者
都是牛X的人物!

使用特权

评论回复
19
cruelfox| | 2017-6-6 09:41 | 只看该作者
whtwhtw 发表于 2017-6-5 14:17
你这SDRAM能跑到多少M频率?网上都推荐4层板以上

STM32F7最高216MHz, SDRAM也就是108MHz了。 没有把MCU超频试过。

使用特权

评论回复
20
CAI_DONGQI| | 2017-6-6 14:47 | 只看该作者
cruelfox 发表于 2017-6-6 09:41
STM32F7最高216MHz, SDRAM也就是108MHz了。 没有把MCU超频试过。

厉害!牛!

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

72

主题

2501

帖子

35

粉丝