在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<abbr id="27omo"></abbr>

<menu id="27omo"><dl id="27omo"></dl></menu>
    • <label id="27omo"><tt id="27omo"></tt></label>

      新聞中心

      EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > ARM編程中Flash ROM驅動示例

      ARM編程中Flash ROM驅動示例

      作者: 時間:2013-12-04 來源:網絡 收藏

      Intel 芯片 i28f160,i28f320:

      i28F320B: 64*64K,64個blocks,4M空間,每個block 64K,第一個64K由8個8*8K小blocks組成.

      每個Black可以被獨立擦寫(壽命周期) 100,000次以上

      操作的大概步驟:

      flash讀寫操作中,讀應該很簡單,和RAM一樣,寫就復雜一點.
      IntelTE28F320C3的flash是4M空間
      flash空間,劃分成許多的block,IntelTE28F320C3的flash是4M空間,64個block,每個block由64K.
      要對所有的block單獨進行操作,每個操作結束,都需要判斷狀態(tài),
      每個block操作的大概步驟如下:
      1.unlock
      2.erase
      3.checkempty
      所有的block完成上述操作,且狀態(tài)正確,才能進行下一步,寫
      4.write

      arm匯編程序

      LDR r2,=Base ;Flash起始地址

      //第一步,UNLOCK的64個block,步驟和上邊一樣


      MOV r1,#63 ;63x64kblock 計數(shù)


      01 LDRB r3,=X16_FLASH_COMMAND_CONFIG_SETUP

      STRB r3,[r2] ;該block的首地址

      LDRBr3,=X16_FLASH_COMMAND_UNLOCK_BLOCK

      STRB r3,[r2] ;將Unlock命令寫入

      ADD r2,r2,#0x10000 ;64K
      SUBS r1,r1,#1
      BNE %b01
      ;UnlockOK ;Unlock 完成

      //第二布,擦除blocks

      LDR r0, =FlashBase
      LDR r1,=63 ;擦除 63x64k block
      01 LDR r3, =X16_FLASH_COMMAND_ERASE
      LDR r2, =X16_FLASH_COMMAND_CONFIRM
      ORR r3, r3, r2, LSL #16
      STR r3, [r0]
      LDR r3, =X16_FLASH_COMMAND_STATUS;檢查寄存器狀態(tài)
      STRB r3, [r0]
      02 LDRB r3, [r0] ;讀狀態(tài)
      TST r3, #X16_FLASH_STATUS_READY
      BEQ %b02 ;若狀態(tài)ready,執(zhí)行下一個
      TST r3, #X16_FLASH_STATUS_ERROR
      BNE error_erase_block
      ADD r0, r0, #0x10000
      SUBS r1, r1, #1
      BNE %b01
      B EraseOK
      error_erase_block
      ..............
      ;EraseOK ;擦除完成

      //第三步,檢查flash是否為空

      ;Check Flash Empty
      LDR r4, =FlashBase
      LDR r5, =0x100000 ;檢查 1MB
      LDR r0, =0xffffffff
      loop_1
      LDR r1, [r4]
      CMP r1, r0 ;比較地址內容和0xffffffff
      BNE empty_error
      ADD r4, r4, #4
      CMP r4, r5
      BLO loop_1
      B CheckOK
      empty_error
      .................
      CheckOK
      .................

      ;Check empty OK ;檢查完成

      //第四步,寫flash

      ;Burn data to Flash ROM

      LDR r6, =Length_Flash ;定義數(shù)據長度
      LDR r0, =FlashBase
      LDR r1, =BufferBase
      MOV r9, #0
      LDR r4,=0x10000000
      LDR r7,=0xc0001000
      STR r4, [r7]
      LDR r1, [r1, r9]

      03 LDR r3, =X16_FLASH_COMMAND_WRITE
      STRB r3, [r0] ;把寫命令放入Block首地址
      LDR r3, =X16_FLASH_COMMAND_STATUS
      LDR r2, [r7]
      LDR r5, =0x0000ffff
      AND r2, r2, r5
      ORR r2, r2, r3, LSL #16
      STR r2, [r0]
      02 LDR r3, [r0] ;讀狀態(tài)寄存器狀態(tài)
      TST r3, #X16_FLASH_STATUS_READY
      BEQ %b02 ;若狀態(tài)ready,執(zhí)行下一個

      LDR r3, =X16_FLASH_COMMAND_WRITE
      LDR r2, [r7]
      LDR r5, =0xffff0000 ;
      AND r2, r2, r5
      ORR r3, r3, r2
      STR r3, [r0]

      LDR r3, =X16_FLASH_COMMAND_STATUS
      STRB r3, [r0]
      02 LDR r3, [r0] ; read status
      TST r3, #X16_FLASH_STATUS_READY
      BEQ %b02

      LDR r4, =X16_FLASH_COMMAND_READ
      STRB r4, [r0]
      ADD r0, r0, #4
      LDR r8, [r7]
      ADD r8, r8,#1
      STR r8, [r7]
      ADD r8, r8, #4
      writenext

      SUBS r6, r6, #4 ;if no finished goto 03
      BHI %b03
      TST r3, #X16_FLASH_STATUS_ERROR
      BNE error_write
      LDR r3, =X16_FLASH_COMMAND_READ
      STRB r3, [r0]
      B BurnOK
      error_write
      ..........
      BurnOK



      關鍵詞: ARM編程 Flash ROM驅動

      評論


      相關推薦

      技術專區(qū)

      關閉