[Cortex-M0技术交流]

测试新唐M0的“写FLASH”的时间消耗,有代码有图有结果

[复制链接]
3415|14
手机看帖
扫描二维码
随时随地手机跟帖
john_lee|  楼主 | 2012-3-26 17:09 | 显示全部楼层 |阅读模式
本帖最后由 john_lee 于 2012-3-28 10:11 编辑

有一个项目用了 mini51,还需要写 dataflash,并且有一定的时间要求,查了一下 TRM,TRM 并没有给出写 flash 的 AC 参数,相关的内容只有一句话:“当 ISPGO 比特被设时, CPU 将等待 ISP 操作完成, 在此期间, 外设将保持正常工作. 如果发生任何中断, CPU等ISP过程完成之后才会处理.”,还有一张图:
m0isp.PNG
在这里要对新唐的文档吐一下槽:给个 AC 参数难吗?
没办法,只有编程测试一下了,我手上只有菜农老哥赠送的助学板,是 nuc120re3an 的 MPU,写 flash 的 AC 参数,想来应该与 mini51 的差不多。
编程的思路是,在“写”flash 之前,记录一下 Systick 的当前值,然后循环写 64 个 32bits 数据,一共 256 字节,“写”完成后,再次记录Systick的当前值,其差值就是“写”flash 需要的时间。
程序(片段)如下:
void test()
{
    using namespace sfr::fmc;
    uint32_t* addr = reinterpret_cast<uint32_t*>(0x1fe00);
    uint32_t data = 0x03020100;
    FMC.ISPCON().ISPEN(1);
    FMC.ISPCMD(0).FOEN(1).FCTRL(1);
    uint32_t n = 64;
    volatile uint32_t* p = reinterpret_cast<volatile uint32_t*>(0xe000e018);
    uint32_t t = *p;
    do {
        FMC.ISPADR = addr++;
        FMC.ISPDAT = data;
        FMC.ISPTRG(0).ISPGO(1);
        data += 0x1010101;
        while (FMC.ISPTRG().ISPGO);
    } while (--n);
    t -= *p;
    cout << "t = " << t << endl;
}
输出截图:
testm0isp.PNG
差值为146660,由于设定的Systick时钟源为HCLK = 48MHz,所以共耗时 146660 / 48 = 3055us,单次写(32 bits)数据耗时 3055 / 64 = 47.7us。
----------------------
今天才看到TRM中其实是有 FLASH 相关的 AC 参数的,怪我看得不全面,主要是受 ATMEL 文档的影响。
flash-ac.PNG

相关帖子

plc_avr| | 2012-3-26 17:35 | 显示全部楼层
抢老师的沙发,哈哈!

使用特权

评论回复
hotpower| | 2012-3-27 06:23 | 显示全部楼层
老师当初为何不要mini51?
成都沙发网友即秒杀王他有一套。
老师是否可以先借之?或我再想方法?
记得9g说给我们俩各一块。

使用特权

评论回复
Swallow_0322| | 2012-3-27 09:55 | 显示全部楼层
本帖最后由 Swallow_0322 于 2012-3-27 09:59 编辑

只有坐地板了... 如果老师项目需要可以把我那块先给老师用着,我最近抽不出时间学习MINI51。

使用特权

评论回复
呆板书生| | 2012-3-27 12:28 | 显示全部楼层
据说在ISP期间,还要关闭所有中断,不知道是否真的

“ CPU 将等待 ISP 操作完成, ...............”

使用特权

评论回复
plc_avr| | 2012-3-27 12:30 | 显示全部楼层
LS,是真的,不关中断,写入会出错!

使用特权

评论回复
john_lee|  楼主 | 2012-3-27 16:31 | 显示全部楼层
哈哈,烈火,你没说对哦。

使用特权

评论回复
john_lee|  楼主 | 2012-3-27 16:35 | 显示全部楼层
3心,谢谢你,对付mini51这种小角色,还用不着实物,你难道怀疑我的手段?

使用特权

评论回复
plc_avr| | 2012-3-27 16:40 | 显示全部楼层
老师,我在大叔的板子上试过的。是我方法不对?就是我上次发的那个FLASH当EEPROM用的那个贴子,不关中断,写入的数据不对呢。

使用特权

评论回复
呆板书生| | 2012-3-27 19:59 | 显示全部楼层
前面5楼的据说,就是据烈火说。

后来我测试了一下程序,没出现数据出错的情况,不过测试的次数不算多,不敢肯定,

使用特权

评论回复
plc_avr| | 2012-3-28 07:21 | 显示全部楼层
哈哈。楼上的兄弟,我当时开了PWM中断,好象是20多KHz,是不是你们测试时开了中断而没有中断任务呢?

使用特权

评论回复
Swallow_0322| | 2012-3-28 07:50 | 显示全部楼层
3心,谢谢你,对付mini51这种小角色,还用不着实物,你难道怀疑我的手段?
john_lee 发表于 2012-3-27 16:35

(*^__^*) 嘻嘻 老师误解了,有了实物更方便些,老师的实力是毫无疑问的!老师不用客气!

使用特权

评论回复
john_lee|  楼主 | 2012-3-28 10:17 | 显示全部楼层
今天才看到TRM中其实是有 FLASH 相关的 AC 参数的,怪我看得不全面,主要是受 ATMEL 文档的影响。
ATMEL 的文档,相关数据、参数、图表等都是紧随其内容的(看内容就可以马上看到其相关参数),这种文档的编排方式,看起来很舒服。

又补测了一下擦除时间,擦除一页(512字节)大概是20ms多一点点,与 TRM 数据一致。

使用特权

评论回复
缥缈九哥| | 2012-3-29 08:22 | 显示全部楼层
顶起。

使用特权

评论回复
-|continue;|-| | 2013-7-22 19:57 | 显示全部楼层
代码不全

使用特权

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

本版积分规则

33

主题

1466

帖子

21

粉丝