前言
大多數玩單片機的人都知道Jlink可以燒寫Hex文件,作為ARM仿真調試器,但是知道能燒寫SPI Flash的人應該不多,本篇文章將介紹如何使用JLink來燒寫或者讀取SPI Flash存儲器,JLink軟件包含的工具中,有一個是JFlashSPI工具,這就是一個燒寫和讀取SPI存儲器的工具了。
准備
- 要燒寫程序或讀取程序的的Flash芯片:SPI協議的Flash都可以,如W25Q128。
- JFlashSPI軟件工具:在Jlink系列軟件的安裝目錄下
- JLink V9仿真器
- 要燒寫的文件:如GBK字庫文件,UNIGBK.BIN
硬件連接
Jlink內部集成了SPI協議,部分接口是作為SPI復用功能的,具體硬件連接,如下圖所示:

對於20P的標准JTAG接口
|引腳編號|名稱|輸入輸出|和SPI Flash的連接|
|----|-----|-----|
|5|DI |輸入|連接SPI Flash的MOSI引腳|
|7|nCS |輸出|連接SPI Flash的CS引腳|
|9|CLK |輸出|連接SPI Flash的CLK引腳|
|13|DO |輸出|連接SPI Flash的MISO引腳|
對於10P的JTAG接口
|引腳編號|名稱|輸入輸出|和SPI Flash的連接|
|----|-----|-----|
|2|nCS |輸出|連接SPI Flash的CS引腳|
|4|CLK |輸出|連接SPI Flash的CLK引腳|
|6|DO |輸出|連接SPI Flash的MISO引腳|
|8|DI |輸入|連接SPI Flash的MOSI引腳|
這里要注意的一點,正版的Jlink仿真器1腳是輸入引腳,是外部提供參考電平的,但由於現在大部分的JLink仿真器都是學習(dao)版的,1腳不是輸入,而是3.3v的輸出,所以可以直接用這個管教來給SPI Flash供電。
1.打開
有兩個工具,一個是JFlashSPI.exe是圖形化工具,一個JFlashSPI_CL.exe是命令行操作,這里重點介紹圖形化工具JFlashSPI,打開Jlink軟件的安裝目錄,雙擊打開JFlashSPI,界面和之前介紹的JFlash差不太多。

2.連接SPI Flash芯片
點擊Target->Connect,如果連接成功的話,會在底部輸出連接信息,會顯示Flash芯片的型號,生產廠家,Flash ID等等信息。

就像我這個Flash芯片,絲印明明寫的華邦Winbond W25Q128,這里讀取的卻是飛索Spansion S25FL128K,難道是盜版芯片?
3.打開程序文件
點擊File->Open data file,打開要燒寫的字庫文件,支持多種格式的文件,由於是選擇的Bin文件,沒有起始地址,所以手動輸入燒寫的起始地址,這里填寫0就可以了。關於燒寫文件的格式說明,可以查看之前的一篇文章:BIN、HEX、AXF、ELF文件格式有什么區別


4.下載
點擊Target->Auto下載程序到Flash芯片內。

下載完成后,會在底部窗口顯示下載成功的信息,可以看出燒寫速度還是比較快的,170KB的字庫文件,用時不到1秒鍾。

5.程序文件的讀取
和讀寫單片機程序一樣,也是支持讀取SPI Flash芯片程序的,為了尊重他人的勞動成果,這里的介紹僅供學習使用,不可用於商業破解目的。


可以看出,和下載相比,讀寫速度明顯要慢得多,因為是讀取的整個16M的存儲區,所以時間會相對長一些。
6.程序文件的保存
程序文件讀取完成后,可選擇將文件保存到本地目錄,保存格式可根據需要選擇。

7.命令行工具的使用
JFlashSPI_CL.exe是JFlashSPI的命令行工具,通過輸入命令實現讀寫Flash,這里簡單介紹一下燒寫功能。
在終端運行:./JFlashSPI_CL.exe
可看到一些幫助信息,主要是指令的說明:

可以看到-connect連接,-open打開燒寫文件,-auto燒寫,如果是燒寫,這3個命令就夠了,首先把要燒寫的文件復制到JFlashSPI_CL.exe同級目錄,輸入指令:
./JFlashSPI_CL.exe -open UNIGBK.BIN 0 -connect -auto
可以看到,燒寫成功

為了方便快捷,我們可以將以上命令寫成一個批處理命令,直接雙擊運行即可,
新建download.bat文件,並以記事本方式打開,輸入以下內容
JFlashSPI_CL.exe -open UNIGBK.BIN 0 -connect -auto
echo 程序燒寫完成!
pause
然后將這個bat文件和要燒寫的字庫文件放到一個文件夾下。雙擊直接運行就可以直接燒寫,是不是方便了許多呢?

支持的芯片列表
支持的Flash芯片多達百種,如Atmel的AT25系列,國產兆易的GD25Q系列等等,基本上常見的SPI協議Flash芯片都支持,具體的芯片列表可查看SEGGER官方網址:List of supported SPI flashes
速度說明
對於不同型號的Flash芯片,Jlink燒寫器最大的寫入速度也不同,具體可參考:
| Flash device | Programming speed1 | Flash device | Programming speed1 |
|---|---|---|---|
| ISSI IS25LP128 | 500 KB/s | Micron N25Q128A | 270 KB/s |
| ISSI IS25LD040 | 100 KB/s | Micron M25P10 | 160 KB/s |
| ISSI IS25LQ080 | 340 KB/s | Micron M25PX16 | 230 KB/s |
| ISSI IS25CD010 | 100 KB/s | Micron M45PE10 | 230 KB/s |
| ISSI IS25CQ032 | 190 KB/s | Micron M25PE4 | 215 KB/s |
| Macronix MX25L3235E | 285 KB/s | Spansion S25FL128 | 410 KB/s |
| Macronix MX66L1G45G | 430 KB/s | Spansion S25FL116K | 265 KB/s |
| Macronix MX66L51235F | 315 KB/s | Winbond W25Q128FV | 340 KB/s |
參考資料:
JLink軟件的下載
JLink_Windows_V614b軟件下載鏈接:JLink_Windows_V614b.exe
Jlink使用技巧系列文章:
- Jlink使用技巧之合並燒寫文件
- Jlink使用技巧之燒寫SPI Flash存儲芯片
- Jlink使用技巧之虛擬串口功能
- Jlink使用技巧之讀取STM32內部的程序
- Jlink使用技巧之單獨下載HEX文件到單片機
- Jlink使用技巧之J-Scope虛擬示波器功能
歡迎大家關注我的個人博客
或微信掃碼關注我的公眾號

