zoukankan      html  css  js  c++  java
  • 第015课_NOR_Flash

    第015课 NOR_Flash

    第001节_NorFlash原理及硬件操作

    使用UBOOT体验NOR FLASH的操作(开发板设为NOR启动,进入UBOOT)
    先使用OpenJTAG烧写UBOOT到NOR FLASH

    1. 读数据
    md.b 0

    2. 读ID
    NOR手册上:
    往地址555H写AAH
    往地址2AAH写55H
    往地址555H写90H
    读0地址得到厂家ID: C2H
    读1地址得到设备ID: 22DAH或225BH
    退出读ID状态: 给任意地址写F0H

    2440的A1接到NOR的A0,所以2440发出(555h<<1), NOR才能收到555h这个地址
    UBOOT怎么操作?

    往地址AAAH写AAH mw.w aaa aa
    往地址554写55H mw.w 554 55
    往地址AAAH写90H mw.w aaa 90
    读0地址得到厂家ID: C2H md.w 0 1
    读2地址得到设备ID: 22DAH或225BH md.w 2 1
    退出读ID状态: mw.w 0 f0

    3. NOR有两种规范, jedec, cfi(common flash interface)
    读取CFI信息

    NOR手册:
    进入CFI模式 往55H写入98H
    读数据: 读10H得到0051
    读11H得到0052
    读12H得到0059
    读27H得到容量

    2440的A1接到NOR的A0,所以2440发出(555h<<1), NOR才能收到555h这个地址
    UBOOT怎么操作?
    进入CFI模式 往AAH写入98H mw.w aa 98
    读数据: 读20H得到0051 md.w 20 1
    读22H得到0052 md.w 22 1
    读24H得到0059 md.w 24 1
    读4EH得到容量 md.w 4e 1
    退出CFI模式 mw.w 0 f0

    4. 写数据: 在地址0x100000写入0x1234
    md.w 100000 1 // 得到ffff
    mw.w 100000 1234
    md.w 100000 1 // 还是ffff

    NOR手册:
    往地址555H写AAH
    往地址2AAH写55H
    往地址555H写A0H
    往地址PA写PD

    2440的A1接到NOR的A0,所以2440发出(555h<<1), NOR才能收到555h这个地址
    UBOOT怎么操作?
    往地址AAAH写AAH mw.w aaa aa
    往地址554H写55H mw.w 554 55
    往地址AAAH写A0H mw.w aaa a0
    往地址0x100000写1234h mw.w 100000 1234

    5. 再次往0x100000写入0x5678
    因为原来0x100000上的数据不是0xffff,再次烧写失败
    往地址AAAH写AAH
    往地址554H写55H
    往地址AAAH写A0H
    往地址0x100000写5678h mw.w 100000 5678

    5.1 先擦除
    mw.w aaa aa
    mw.w 554 55
    mw.w aaa 80

    mw.w aaa aa
    mw.w 554 55
    mw.w 100000 30


    5.2 再烧写
    mw.w aaa aa
    mw.w 554 55
    mw.w aaa a0
    mw.w 100000 5678


    第002节_NorFlash编程_识别
    1. 编译程序时加上: -march=armv4
    否则
    volatile unsigned short *p = xxx;
    *p = val; // 会被拆分成2个strb操作

    2. 把timer中断去掉
    否则: 测试nor时进入CFI等模式时, 如果发生了中断,cpu必定读NOR,
    那么读不到正确的指令,导致程序崩溃

    作业:实现一个关中断、开中断的函数,
    在测试NOR FLASH时关中断,测完后开中断。
    这样就不需要注释掉timer的中断函数了

    第003节_NorFlash编程_擦写读
    作业:这个程序写得不好,应该把nor_read, nor_write, nor_erase单独实现出来,
    现在都是内嵌在do_read_nor_flash、do_write_nor_flash、do_erase_nor_flash里了。
    请实现nor_read, nor_write, nor_erase函数,再在do_xxx中调用它们

    版权声明:本文为博主原创文章,转载请注明文章来源,有需要帮忙可加QQ:871263854
  • 相关阅读:
    [再寄小读者之数学篇](2014-05-27 偏导数的计算)
    [再寄小读者之数学篇](2014-05-27 积分估计)
    [再寄小读者之数学篇](2014-05-27 二阶矩阵的不等式)
    [再寄小读者之数学篇](2014-05-27 特征值估计)
    [家里蹲大学数学杂志]第039期高等数学习题集
    [家里蹲大学数学杂志]第038期历史上最伟大的10个方程
    [家里蹲大学数学杂志]第037期泛函分析期末试题
    [再寄小读者之数学篇](2014-05-26 计算行列式)
    [家里蹲大学数学杂志]第036期泛函分析期末试题
    [再寄小读者之数学篇](2014-05-25 矩阵的交换子)
  • 原文地址:https://www.cnblogs.com/Dream998/p/8540619.html
Copyright © 2011-2022 走看看