[STM32F4] STM32F429 读写SDRAM

[复制链接]
8193|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
 楼主| ycy9999 发表于 2014-5-28 12:34 | 显示全部楼层
板子是自己画的,参考STM32F429I-DISCORVERY,原理图相同只是走线不同了,运行在65MHz
mmuuss586 发表于 2014-5-28 13:10 | 显示全部楼层
ycy9999 发表于 2014-5-28 12:34
板子是自己画的,参考STM32F429I-DISCORVERY,原理图相同只是走线不同了,运行在65MHz
...

降低速度看看
 楼主| ycy9999 发表于 2014-5-28 15:01 | 显示全部楼层
降频到30M,结果一样
戈卫东 发表于 2014-5-28 15:23 | 显示全部楼层
检查有没有虚焊、短路啥的。。。。。。。
 楼主| ycy9999 发表于 2014-5-28 16:49 | 显示全部楼层
若是硬件问题,哪位大神对sdram比较熟悉,大概应该查SDRAM的哪条信号线呢
hexenzhou 发表于 2014-5-28 20:00 | 显示全部楼层
写一个程序对SDRAM的读写校验一下,看是否是SDRAM的问题。
 楼主| 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
五三九 发表于 2014-5-28 23:56 | 显示全部楼层
我怎么感觉像是指令错了,会不会是写字节用成写字指令了!
玄德 发表于 2014-5-29 09:09 | 显示全部楼层

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

yuxhuitx 发表于 2014-5-29 10:03 | 显示全部楼层
现象楼主描述的现象看像是低位地址短路了,实际每次取得都是同一个地址的数据
icecut 发表于 2014-5-29 10:06 | 显示全部楼层
建议你单步调试.每写一个字节就会更新一次显示.
软件有问题就会全部出错.可是你这里就像多写了一些数据..建议先测硬件信号稳定性
 楼主| ycy9999 发表于 2014-5-29 10:42 | 显示全部楼层
问题解决,是SDRAM读写问题,SDRAM有一个突发模式,原先的设置长度为2,改为1后问题解决,希望这个问题对大家有帮助,SDRAM操作确实和SRAM不同啊,困扰了这么长时间,谢谢大家的建议
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节:
BL1.JPG
您需要登录后才可以回帖 登录 | 注册

本版积分规则

20

主题

54

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部