關於J-Flash ARM V4.14c識別Flash ID錯誤
原有工程是基於ADS v1.2的,使用J-Flash ARM V4.14c把編譯文件寫入到Flash。
嘗試將工程移植到IAR 6.3上,在使用IAR的示例工程GettingStarted的Debug NOR Flash模式下載運行後,再使用J-Flash ARM V4.14c進行連接Flash時出現下面的錯誤信息:
Connecting ...
- Connecting via USB to J-Link device 0
- J-Link firmware: V1.20 (J-Link ARM V8 compiled Sep 22 2011 16:23:23)
- JTAG speed: 8000 kHz (Auto)
- Initializing CPU core (Init sequence) ...
- Executing Reset (0, 200 ms)
- Initialized successfully
- JTAG speed: 8000 kHz (Auto)
- J-Link found 1 JTAG device. Core ID: 0x07926009 (ARM9)
- ERROR: Flash Id error. Expected 0x1227E, found: 0xF018E28F
- ERROR: Failed to connect
網上搜索頁看到類似的問題,不過沒有明確的解決辦法,今天成功該問題,大體思路是既然Flash Id被覆蓋了,那麼就要考慮如何恢復。
在參考芯片手冊的S29GL128N Command Definitions, x16表格後,找到Device ID項。
| Addr | Data | Addr | Data | Addr | Data | Addr | Data | Addr | Data | Addr | Data |
| 555 | AA | 2AA | 55 | 555 | 90 | X01 | 227E | X0E | Note17 | X0F | Note17 |
X = Don’t care
Note17. S29GL512NH/L = 2223h/23h, 220h/01h; S29GL256NH/L = 2222h/22h, 2201h/01h; S29GL128NH/L = 2221h/21h, 2201h/01h.
還是在示例工程GettingStarted,不過選擇Debug xRAM模式,讓其在外部內存上運行,並在main循環前加入下面代碼進行重新設置Device ID:
typedef uint16 flashunit;
const uint32 flashBase = 0x10000000;
/* Flash Reset */
*(volatile flashunit *)flashBase = (flashunit)0x00F0;
for(volatile int i = 20; i; i--);
volatile flashunit Dummy = *(flashunit *)flashBase;
/* Device ID */
*((volatile flashunit *)flashBase + 0x555) = (flashunit)0x00AA;
*((volatile flashunit *)flashBase + 0x2AA) = (flashunit)0x0055;
*((volatile flashunit *)flashBase + 0x555) = (flashunit)0x0090;
*((volatile flashunit *)flashBase + 0x001) = (flashunit)0x227E;
*((volatile flashunit *)flashBase + 0x00E) = (flashunit)0x2201;
*((volatile flashunit *)flashBase + 0x00F) = (flashunit)0x0001;
調試運行之後,再次通過J-Flash ARM V4.14c進行連接,即認證成功。
Connecting ...
- Connecting via USB to J-Link device 0
- J-Link firmware: V1.20 (J-Link ARM V8 compiled Sep 22 2011 16:23:23)
- JTAG speed: 8000 kHz (Auto)
- Initializing CPU core (Init sequence) ...
- Executing Reset (0, 200 ms)
- Initialized successfully
- JTAG speed: 8000 kHz (Auto)
- J-Link found 1 JTAG device. Core ID: 0x07926009 (ARM9)
- Flash ID (Chip 0) = 0x1227E (Verified)
- Connected successfully
對上述實驗的思考:
Flash硬件通過地址總線和數據總線與CPU相連接,程序根據芯片手冊提供的Addr和Data的序列發送數據,同時Flash芯片識別該序列,並執行對應操作。
以上爲個人思考,如有不妥,噴噴無妨。
嘗試將工程移植到IAR 6.3上,在使用IAR的示例工程GettingStarted的Debug NOR Flash模式下載運行後,再使用J-Flash ARM V4.14c進行連接Flash時出現下面的錯誤信息:
Connecting ...
- Connecting via USB to J-Link device 0
- J-Link firmware: V1.20 (J-Link ARM V8 compiled Sep 22 2011 16:23:23)
- JTAG speed: 8000 kHz (Auto)
- Initializing CPU core (Init sequence) ...
- Executing Reset (0, 200 ms)
- Initialized successfully
- JTAG speed: 8000 kHz (Auto)
- J-Link found 1 JTAG device. Core ID: 0x07926009 (ARM9)
- ERROR: Flash Id error. Expected 0x1227E, found: 0xF018E28F
- ERROR: Failed to connect
網上搜索頁看到類似的問題,不過沒有明確的解決辦法,今天成功該問題,大體思路是既然Flash Id被覆蓋了,那麼就要考慮如何恢復。
在參考芯片手冊的S29GL128N Command Definitions, x16表格後,找到Device ID項。
| Addr | Data | Addr | Data | Addr | Data | Addr | Data | Addr | Data | Addr | Data |
| 555 | AA | 2AA | 55 | 555 | 90 | X01 | 227E | X0E | Note17 | X0F | Note17 |
X = Don’t care
Note17. S29GL512NH/L = 2223h/23h, 220h/01h; S29GL256NH/L = 2222h/22h, 2201h/01h; S29GL128NH/L = 2221h/21h, 2201h/01h.
還是在示例工程GettingStarted,不過選擇Debug xRAM模式,讓其在外部內存上運行,並在main循環前加入下面代碼進行重新設置Device ID:
typedef uint16 flashunit;
const uint32 flashBase = 0x10000000;
/* Flash Reset */
*(volatile flashunit *)flashBase = (flashunit)0x00F0;
for(volatile int i = 20; i; i--);
volatile flashunit Dummy = *(flashunit *)flashBase;
/* Device ID */
*((volatile flashunit *)flashBase + 0x555) = (flashunit)0x00AA;
*((volatile flashunit *)flashBase + 0x2AA) = (flashunit)0x0055;
*((volatile flashunit *)flashBase + 0x555) = (flashunit)0x0090;
*((volatile flashunit *)flashBase + 0x001) = (flashunit)0x227E;
*((volatile flashunit *)flashBase + 0x00E) = (flashunit)0x2201;
*((volatile flashunit *)flashBase + 0x00F) = (flashunit)0x0001;
調試運行之後,再次通過J-Flash ARM V4.14c進行連接,即認證成功。
Connecting ...
- Connecting via USB to J-Link device 0
- J-Link firmware: V1.20 (J-Link ARM V8 compiled Sep 22 2011 16:23:23)
- JTAG speed: 8000 kHz (Auto)
- Initializing CPU core (Init sequence) ...
- Executing Reset (0, 200 ms)
- Initialized successfully
- JTAG speed: 8000 kHz (Auto)
- J-Link found 1 JTAG device. Core ID: 0x07926009 (ARM9)
- Flash ID (Chip 0) = 0x1227E (Verified)
- Connected successfully
對上述實驗的思考:
Flash硬件通過地址總線和數據總線與CPU相連接,程序根據芯片手冊提供的Addr和Data的序列發送數據,同時Flash芯片識別該序列,並執行對應操作。
以上爲個人思考,如有不妥,噴噴無妨。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.