打印
[STM32F4]

STM32F429 读写SDRAM

[复制链接]
7536|16
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
ycy9999|  楼主 | 2014-5-28 10:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
现在调试STM32F429遇到一个问题,对LCD显示缓冲区读写,采用16位模式,对偶数地址写,会影响后面奇数地址的内容(比如对偶数地址写1,后面的奇数地址也变成了1),反过来一样,对奇数地址写,会影响前面的偶数地址内容,哪位大侠给解释一下,是硬件电路问题还是软件设置问题
沙发
戈卫东| | 2014-5-28 11:20 | 只看该作者
感觉像是硬件问题。。。。

使用特权

评论回复
板凳
mmuuss586| | 2014-5-28 11:56 | 只看该作者
板子自己画的吗???
参考谁的硬件啊

使用特权

评论回复
地板
caizhiwei| | 2014-5-28 12:19 | 只看该作者
【STM32F429开发日志】2. 外部sdram读写测试-STM32-STMCU社区,32位MCU--论坛--STMCU社区 stmcu.org
http://www.stmcu.org/bbs/article_244_587392.html

使用特权

评论回复
5
ycy9999|  楼主 | 2014-5-28 12:34 | 只看该作者
板子是自己画的,参考STM32F429I-DISCORVERY,原理图相同只是走线不同了,运行在65MHz

使用特权

评论回复
6
mmuuss586| | 2014-5-28 13:10 | 只看该作者
ycy9999 发表于 2014-5-28 12:34
板子是自己画的,参考STM32F429I-DISCORVERY,原理图相同只是走线不同了,运行在65MHz
...

降低速度看看

使用特权

评论回复
7
ycy9999|  楼主 | 2014-5-28 15:01 | 只看该作者
降频到30M,结果一样

使用特权

评论回复
8
戈卫东| | 2014-5-28 15:23 | 只看该作者
检查有没有虚焊、短路啥的。。。。。。。

使用特权

评论回复
9
ycy9999|  楼主 | 2014-5-28 16:49 | 只看该作者
若是硬件问题,哪位大神对sdram比较熟悉,大概应该查SDRAM的哪条信号线呢

使用特权

评论回复
10
hexenzhou| | 2014-5-28 20:00 | 只看该作者
写一个程序对SDRAM的读写校验一下,看是否是SDRAM的问题。

使用特权

评论回复
11
ycy9999|  楼主 | 2014-5-28 22:53 | 只看该作者
应该是SDRAM软件问题,执行如下代码
for(i=0;i<480000;i++)
{
        *(__IO uint16_t*) (SDRAM_BANK_ADDR + i*2) = 0xfffff;
}
for (i = 0x00; i < (600);i++ )
{
     *(__IO uint16_t*) (SDRAM_BANK_ADDR + i*1600+700) = 0;//(uint16_t)0xf800;
     *(__IO uint16_t*) (SDRAM_BANK_ADDR + i*1600+704) = 0;//(uint16_t)0xf800;
    *(__IO uint16_t*) (SDRAM_BANK_ADDR + i*1600+708) = 0;//(uint16_t)0xf800;
    *(__IO uint16_t*) (SDRAM_BANK_ADDR + i*1600+712) = 0;//(uint16_t)0xf800;
    *(__IO uint16_t*) (SDRAM_BANK_ADDR + i*1600+716) = 0;//(uint16_t)0xf800;
    *(__IO uint16_t*) (SDRAM_BANK_ADDR + i*1600+720) = 0;//(uint16_t)0xf800;
}
然后液晶屏显示如附图,按照代码应该是6条一个像素宽的竖线,但中间有的地方有点连接,
最后线是2个像素宽度,显然不正确,貌似写一个数据后若不立即再写入一个数据,后面的
数据会自动填充,哪位对STM32F429 的SDRAM操作比较精通,给个建议哦

IMG_20140528_220924.jpg (493.24 KB )

IMG_20140528_220924.jpg

使用特权

评论回复
12
五三九| | 2014-5-28 23:56 | 只看该作者
我怎么感觉像是指令错了,会不会是写字节用成写字指令了!

使用特权

评论回复
13
玄德| | 2014-5-29 09:09 | 只看该作者

倾向于硬件焊接问题。
以前SRAM遇到过。

使用特权

评论回复
14
yuxhuitx| | 2014-5-29 10:03 | 只看该作者
现象楼主描述的现象看像是低位地址短路了,实际每次取得都是同一个地址的数据

使用特权

评论回复
15
icecut| | 2014-5-29 10:06 | 只看该作者
建议你单步调试.每写一个字节就会更新一次显示.
软件有问题就会全部出错.可是你这里就像多写了一些数据..建议先测硬件信号稳定性

使用特权

评论回复
16
ycy9999|  楼主 | 2014-5-29 10:42 | 只看该作者
问题解决,是SDRAM读写问题,SDRAM有一个突发模式,原先的设置长度为2,改为1后问题解决,希望这个问题对大家有帮助,SDRAM操作确实和SRAM不同啊,困扰了这么长时间,谢谢大家的建议

使用特权

评论回复
17
chunk| | 2014-5-29 17:05 | 只看该作者
我通常会把原厂的DEMO程序和芯片用户手册对比着读,比如在STM32Cube_FW_F4_V1.1.0这个软件包中,示例工程Examples\BSP中给出了SDRAM的初始化过程,在stm324x9i_eval_sdram.c中有函数BSP_SDRAM_Initialization_sequence,其中有代码如下:
    /* Step 5: Program the external memory mode register */
  tmpmrd = (uint32_t)SDRAM_MODEREG_BURST_LENGTH_1          |\
                     SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL   |\
                     SDRAM_MODEREG_CAS_LATENCY_3           |\
                     SDRAM_MODEREG_OPERATING_MODE_STANDARD |\
                     SDRAM_MODEREG_WRITEBURST_MODE_SINGLE;
  
  Command.CommandMode            = FMC_SDRAM_CMD_LOAD_MODE;
  Command.CommandTarget          = FMC_SDRAM_CMD_TARGET_BANK1;
  Command.AutoRefreshNumber      = 1;
  Command.ModeRegisterDefinition = tmpmrd;

  /* Send the command */
  HAL_SDRAM_SendCommand(&sdramHandle, &Command, SDRAM_TIMEOUT);

注意第一行就有SDRAM_MODEREG_BURST_LENGTH_1,对应手册RM0090的1641页第37.7.3节:

使用特权

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

本版积分规则

18

主题

52

帖子

0

粉丝