完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
扫一扫,分享给好友
系统结构与功能:
lpc3131外接8k*8双口ram与8G Flash,从双口ram读取数据(来自FPGA),并存至Flash中。 问题: 丢数据,系统速度远低于ram的读速与Flash的写速度。 双口ram读数据直接采用指针,如下: for(i=0;i nandflash.databuf[nandflash.ptr_buf] = *(volatile UNS_8 *)(EXT_SRAM0_0_BASE + ram.ptr); nandflash.ptr_buf++; ram.ptr++; } Flash按页写的程序如下: INT_32 nand_page_write(INT_32 devid, void * buffer, INT_32 bank_num, INT_32 block_num, INT_32 page_num) { NAND_DRV_T *nanddrv = (NAND_DRV_T *) devid; NAND_FLASH_CTRL_REGS_T *nandreg = nanddrv->regptr; UNS_32 * pData; UNS_32 * pnfbuf[2]; UNS_32 i,j,tmp; UNS_8 addr1 = 0; UNS_8 addr2 = 0; UNS_8 addr3 = (UNS_8)(((block_num<<6)&0x0C0)+(page_num&0x03F)); UNS_8 addr4 = (UNS_8)((block_num>>2)&0x0FF); UNS_8 addr5 = (UNS_8)((block_num>>10)&0x07); pnfbuf[0] = (UNS_32 *) NANDFLASH_CTRL_S0_BASE; pnfbuf[1] = (UNS_32 *) (NANDFLASH_CTRL_S0_BASE + 0x400); nandreg->set_ce = NAND_SETCE_WP | NAND_SETCE_CV(bank_num); nandreg->set_cmd = NAND_CMD_SDIN; nandreg->set_addr = addr1; nandreg->set_addr = addr2; nandreg->set_addr = addr3; nandreg->set_addr = addr4; nandreg->set_addr = addr5; for(j=0;j<8;j++) { pData = (UNS_32 *)((UNS_8 *)buffer + j*512); tmp = j&0x01; for(i=0;i<128;i++) { *(pnfbuf[tmp]+i) = *(pData + i); } if(j>0) { while(!(nand_ioctl(devid, NAND_IRQ_STATUS, 3-tmp))); while((nand_ioctl(devid, NAND_IRQ_STATUS, 3-tmp)))nandreg->irq_status_raw = 0xFFFFFFFF; } nandreg->control_flow = NAND_CTRL_RD_RAM(4+tmp); } while(!(nand_ioctl(devid, NAND_IRQ_STATUS, 3))); while((nand_ioctl(devid, NAND_IRQ_STATUS, 3)))nandreg->irq_status_raw = 0xFFFFFFFF; nandreg->set_cmd = NAND_CMD_PAGEPROG; while((nand_ioctl(devid, NAND_RB_STATUS, bank_num))); while(!(nand_ioctl(devid, NAND_RB_STATUS, bank_num))); return 0; } 为什么速度远低于芯片说明文档中的读写速度??? 求指点,非常感谢! |
|
相关推荐
2个回答
|
|
RAM的读写速度很快 只是读写FLASH会很慢一些
|
|
|
|
你说的‘远低于’包不包括FLASH写页的过程?
如果包括建议合理安排写页和读取的顺序,比如可以在写页后先不马上判断是否写入完成,而是先读空双口RAM,然后再去判断,这样,最低的处理速度基本就只取决于FLASH的速度;还是不行的话就只有中断方式读RAM,或者中断方式结束写页判断;还是不行,就需要考虑换速度快的flash,或增加缓冲区大小了; 还有,时间比较紧迫的应用里面,尽量使用临时变量作为增量指针,不要使用结构体里面的元素,因为使用结构体里面的元素作为指针的话,会有一个对该元素寻址的计算过程,会花CPU时间,如果编译器优化较差的话,对一个元素的增量、使用、保存增量后的值,均会重复这个寻址的计算过程,成倍增加CPU开销 评分
|
||
|
||
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
飞凌嵌入式ElfBoard ELF 1板卡-i2c与从设备通讯编程示例之开发板测试
1006 浏览 0 评论
ubuntu ping 开发板存在严重的丢包情况,请问该怎么解决?
2061 浏览 1 评论
12G-SDI高清视频开发案例,让4K视频采集更便捷!基于Xilinx MPSoC高性能平台
1822 浏览 0 评论
全志T507-H国产平台Ubuntu系统正式发布,让您的应用开发更便捷!
1264 浏览 0 评论
全志T507-H国产平台Ubuntu系统正式发布,让您的应用开发更便捷!
29 浏览 0 评论
浏览过的版块 |
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-5 14:21 , Processed in 0.720274 second(s), Total 80, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号