JTAG Flash編程


Flash可以通過四個間接寄存器訪問:FLASHCON、FLASHADR、FLASHDAT和FLASHSCL。每個寄存器通過間接讀和間接寫來訪問。

FLASHCON

FLASHCON是一個8-bit寄存器,用於控制FLASH邏輯應答對FLASHDAT寄存器的讀和寫。FLASHCON寄存器由ReadMode和WriteMode設置組成,具體如下:

7:4 3:0
WriteMode ReadMode
ReadMode 描述
0000 FLBUSY Polling
0010 Initiate FLASH read;Increment FLASHADR

注:未註明的狀態都是保留狀態

WriteMode 描述
0000 FLBUSY Polling
0001 Initiate FLASH Write;Increment FLASHADR
0010 Initiate page erase on current page if FLASHDAT = 0xA5; Initiate erase of entire FLASH if FLASHDAT = 0xA5 and FLASHADR is set to the address of the FLASH Read Lock Byte or the FLASH Write/Erase Lock Byte.

注:未註明的狀態都是保留狀態

FLASHADR

FLASHADR是一個16bit位寬的寄存器,用於指定讀操作或寫操作的目的地址。FLASHADR在完成一次讀操作或寫操作後會自動增加。

FLASHDAT

FLASHDAT是一個10-bit位寬的寄存器,包含8bit數據,1bit FLFail和1bit的FLBusy。

9:2 1 0
FLData FLFail FLBusy

對FLASHDAT寫操作僅僅需要8bit,因爲被鎖存的最後一位假定是MSB位置。

對FLASHDAT讀操作要求11個DR_SHIFT週期,8Cycle用於FLDATA,1個週期用於FLFail,1個週期用於FLBusy,1個週期用於Busy。

FLBusy輪詢需要至少兩個DR_SHIFT週期,一個週期用於FLBust,另一個週期用於Busy。

FLASHSCL

FLASHSCL是一個8bit寄存器,用於設置FLASH操作時序所需要的預分頻值。當工作在內部2MHz系統時鐘時,該寄存器應該配置爲0x86.

7:4 3:0
1000 0110

FLASH訪問流程

在FLASH被編程前,設備需要被複位,看門狗需要被設置爲離線模式,否則看門狗可能在FLASH編程過程中發起系統復位,進而導致不確定的行爲。

禁用看門狗定時器(WDT)

流程圖顯示了禁用看門狗定時器的過程,整個過程如下:

  1. 系統通過加載0x2FFF到指令寄存器迫使系統復位;
  2. 加載0x1004到指令寄存器讀取IDCODE,通過在TDI寫入0x0000_0000,從而在接收端TDO獲得IDCODE;
  3. 所有後續的指令地址都需要設置StateCntl爲0x4,這樣使得CPU核處於SUSPEND狀態,使得FLASH處於Off-Line。

在這裏插入圖片描述

讀取FLASH內部的一個字節

具體流程如下:

  1. 加載0x86到FLASHSCL,使用內部2MHz系統時鐘設置合適的FLASH時序。這可以通過一個對FLASHSCL的間接寫0x86來實現;
  2. 將讀操作的目標地址加載到FLASHADR;
  3. 加載0x01到FLASHCON,發起一次讀操作;
  4. 通過讀FLASHDAT發起讀,這是一次間接讀0bit操作;
  5. 加載0x00到FLASHCON來輪詢FLBusy,查看是否處於忙狀態;
  6. 輪詢FLBusy直到該信號變低,表示讀操作已完成;
  7. 讀FLASHDAT;

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章