完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
本帖最后由 jf_82872908 于 2020-8-27 12:39 编辑
现象: 设计PCB,展开SDRAM,出现异常现象,初始化之后,运行测试程序,SDRAM有256Mb大小,测试到32Mb就停止了。把测试停止之后的地址作为开始地址进行再一次测试,无响应。SDRAM的起始地址为0xC000 0000,异常地址在0xC1FFFFFC,大家知道这是怎么回事吗?什么原因? 代码:外部的定义 #define SDRAM_SIZE((uint32_t)0x1000 0000)#define SDRAM_SIZE_MB((uint32_t)0x100) #define RT_tiCK_PER_SECOND 1000 测试代码: int sdram_test1(void) { uint32_t i = 0; uint32_t start_time = 0; volatile uint32_t time_cast = 0; char data_width = 4; uint32_t data = 0; rt_kprintf(“正在写入%d MB-%dbytes数据,正在等待... n”,SDRAM_SIZE_MB,SDRAM_SIZE); start_time = rt_tick_get(); //获取当前时钟 为(i = 0; i *(_ IO uint32_t *)(SDRAM_BANK_ADDR + i * data_width)=(uint32_t)0x5555 5555; 数据= *(__ IO uint32_t *)(SDRAM_SIZE_ADDR + i *数据宽度); if(data!= 0x55555555) { rt_kprintf(“ SDRAM测试失败,Data:%d n”,data); 打破; } time_cast = rt_tick_get()-start_time; if(((i + 1)* data_width)%(1024 * 1024)== 0) { rt_kprintf(“%d Mb Data Checked!Addr:0x%X,count / sum:%d /%d,获取数据: 0x%X成本时间:%d。%03dS。 n“,(int)((i + 1)* data_width / 1024/1024),(SDRAM_BANK_ADDR + i * data_width),i + 1,SDRAM_SIZE / data_width,data ,time_cast / RT_TICK_PER_SECOND, time_cast%RT_TICK_PER_SECOND /(((RT_TICK_PER_SECOND * 1 + 999)/ 1000)); } if(i> = SDRAM_SIZE / data_width) { rt_kprintf(“ SDRAM测试成功! n”); 打破; } } 返回RT_EOK; } MSH_CMD_EXPORT(sdram_test1,SDRAM测试1)控制台现象: | / -RT-线程操作系统 / | 4.0.2 build 2020 年8月27 日-2019年rt-thread团队 sdram初始化成功,映射为0xC0000000,大小为256 Mb,数据宽度为32系统调度程序启动 主线程工作... msh /> sdram_test1 编写256 Mbytes-268435456字节数据,正在等待。... 1 Mb数据已检查!地址:0xC00FFFFC,计数/总和:262144/67108864,获取数据:0x55555555花费时间:0.084S。 2 Mb数据已检查!地址:0xC01FFFFC,计数/总和:524288/67108864,获取数据:0x55555555花费时间:0.177S。 已检查3 Mb数据!地址:0xC02FFFFC,计数/总和:786432/67108864,获取数据:0x55555555花费时间:0.270S。 已检查4 Mb数据!地址:0xC03FFFFC,计数/总和:1048576/67108864,获取数据:0x55555555花费时间:0.363S。 已检查5 Mb数据!地址:0xC04FFFFC,计数/总和:1310720/67108864,获取数据:0x55555555花费时间:0.457S。 已检查6 Mb数据!地址:0xC05FFFFC,计数/总和:1572864/67108864,获取数据:0x55555555花费时间:0.550S。 已检查7 Mb数据!地址:0xC06FFFFC,计数/总和:1835008/67108864,获取数据:0x55555555花费时间:0.643S。 已检查8 Mb数据!地址:0xC07FFFFC,计数/总和:2097152/67108864,获取数据:0x55555555花费时间:0.736S。 已检查9 Mb数据!地址:0xC08FFFFC,计数/总和:2359296/67108864,获取数据:0x55555555花费时间:0.830S。 已检查10 Mb数据!地址:0xC09FFFFC,计数/总和:2621440/67108864,获取数据:0x55555555花费时间:0.923S。 已检查11 Mb数据!地址:0xC0AFFFFC,计数/总和:2883584/67108864,获取数据:0x55555555花费时间:1.016S。 已检查12 Mb数据!地址:0xC0BFFFFC,计数/总和:3145728/67108864,获取数据:0x55555555花费时间:1.109S。 已检查13 Mb数据!地址:0xC0CFFFFC,计数/总和:3407872/67108864,获取数据:0x55555555花费时间:1.203S。 已检查14 Mb数据!地址:0xC0DFFFFC,计数/总和:3670016/67108864,获取数据:0x55555555花费时间:1.296S。 15 Mb数据已检查!地址:0xC0EFFFFC,计数/总和:3932160/67108864,获取数据:0x55555555花费时间:1.389S。 已检查16 Mb数据!地址:0xC0FFFFFC,计数/和:4194304/67108864,获取数据:0x55555555花费时间:1.483S。 已检查17 Mb数据!地址:0xC10FFFFC,计数/总和:4456448/67108864,获取数据:0x55555555花费时间:1.576S。 已检查18 Mb数据!地址:0xC11FFFFC,计数/总和:4718592/67108864,获取数据:0x55555555花费时间:1.669S。 已检查19 Mb数据!地址:0xC12FFFFC,计数/总和:4980736/67108864,获取数据:0x55555555花费时间:1.763S。 已检查20 Mb数据!地址:0xC13FFFFC,计数/总和:5242880/67108864,获取数据:0x55555555花费时间:1.856S。 已检查21 Mb数据!地址:0xC14FFFFC,计数/总和:5505024/67108864,获取数据:0x55555555花费时间:1.949S。 22 Mb数据已检查!地址:0xC15FFFFC,计数/总和:5767168/67108864,获取数据:0x55555555花费时间:2.043S。 已检查23 Mb数据!地址:0xC16FFFFC,计数/总和:6029312/67108864,获取数据:0x55555555花费时间:2.136S。 已检查24 Mb数据!地址:0xC17FFFFC,计数/总和:6291456/67108864,获取数据:0x55555555花费时间:2.229S。 已检查25 Mb数据!地址:0xC18FFFFC,计数/总和:6553600/67108864,获取数据:0x55555555花费时间:2.323S。 已检查26 Mb数据!地址:0xC19FFFFC,计数/总和:6815744/67108864,获取数据:0x55555555花费时间:2.416S。 已检查27 Mb数据!地址:0xC1AFFFFC,计数/总和:7077888/67108864,获取数据:0x55555555花费时间:2.509S。 已检查28 Mb数据!地址:0xC1BFFFFC,计数/总和:7340032/67108864,获取数据:0x55555555花费时间:2.603S。 已检查29 Mb数据!地址:0xC1CFFFFC,计数/和:7602176/67108864,获取数据:0x55555555花费时间:2.696S。 30 Mb数据已检查!地址:0xC1DFFFFC,计数/和:7864320/67108864,获取数据:0x55555555花费时间:2.789S。 已检查31 Mb数据!地址:0xC1EFFFFC,计数/总和:8126464/67108864,获取数据:0x55555555花费时间:2.883S。 已检查32 Mb数据!地址:0xC1FFFFFC,计数/总和:8388608/67108864,获取数据:0x55555555花费时间:2.976S。 附件为电路连接。
|
|
相关推荐
3个回答
|
|
你如果是 256Mb 的内存,就是 32MB 字节,1B = 8b,32MB = 256Mb,没问题呀
|
|
|
|
关注一下地址线
|
|
|
|
SDRAM的起始地址为0xC000 0000,异常地址在0xC1FFFFFC,一共 0x01FFFFFC 个地址,也就是 32M 个地址,没错。每个地址对应一个字节的数据,也就是 8 bit,32M 个 8 bit 就是 256Mb 大小,没错。 0xC1FFFFFC 地址就是 SDRAM 最后一个地址了,再往后的地址都是空,当然会出错
|
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
991 浏览 0 评论
AD7686芯片不传输数据给STM32,但是手按住就会有数据。
970 浏览 2 评论
2080 浏览 0 评论
如何解决MPU-9250与STM32通讯时,出现HAL_ERROR = 0x01U
1177 浏览 1 评论
hal库中i2c卡死在HAL_I2C_Master_Transmit
1599 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-23 04:48 , Processed in 0.645005 second(s), Total 76, Slave 58 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号