ALTERA CPLD离线烧写方案设计(MCU模拟JTAG)
在含有CPLD芯片的電子產品中,由于代碼中的BUG需要升級固件,如果以前的固件內沒有離線燒寫系統,那么必須要通過專門的燒寫工具把固件下載到CPLD中去(如USB Blaster),但這樣非常繁瑣,而且不方便售后服務,所以代碼內集成離線燒寫系統的重要性可見一斑。
廢話不多說,直接進入正題!!!
方案一:ALTERA 官方Jam STAPL Byte-Code Player Version 2.2
點擊官方源碼跳轉到官方下載頁面
該方案可移植到DOS、嵌入式(包括STM32等MCU)、windows等平臺,采用.jbc二進制文件(可以由quartus軟件生成)作為程序文件進行編程。
移植到MCU(STM32為例子)額外注意事項如下:
1、JBC文件中的數據到提出出來存放到一個數組中(由jbc2data.c得到)
2、移植參考STM32的CPLD離線燒寫系統設計.pdf、源碼中的readme.txt、AN 122 Using Jam STAPL for ISP via an Embedded Processor.pdf文檔
3、根據平臺屏蔽或者刪除掉不相關的函數、頭文件
4、Jam STAPL Byte-Code Playe源碼中的標準請參考jesd71_stapl.pdf
5、源碼本身占用大概20K的空間,另外還要占用大概16K以上的RAM空間(因為代碼中申請了非常多的堆空間)
6、.jbc文件可由quartus II ->代碼下載頁面 -> file -> create Jam、Svf、Jbc… -> Jam STAPL Byte-Code 2.0(.jbc)生成 (方案二的.svf文件也在這里生成,一般選擇1MHz的TCK頻率)
移植后成功升級CPLD固件的輸出信息:
方案二:由SVF文件獲得編程細節,模擬JTAG進行編程
重要參考文章:
1、MCU模擬JTAG接口對LATTICE CPLD FPGA 進行在線編程加載
NOTE:
1)、該文章內JTAGState結構體中的Pattern為TMS對應不同狀態的值,如IDLE->SHIFTIR,TMS從1->1->0->0變化(計為0xC0),共4個TCK。
2)、Lattice與Altera的SVF文件有很大區別,所以只需要看懂Excute_SIR、SDR、Set_JTAG_State_Machine()等幾個函數即可
2、ARM JTAG 調試原理.pdf(仔細讀懂里面的狀態機轉換)
SVF文件部分細節如下(生成方法同生成.jbc文件類似,注意TCK頻率不宜過高,1MHz即可):
! ! ! TRST ABSENT; ENDDR IDLE; ENDIR IRPAUSE; STATE IDLE; SIR 10 TDI (2CC); RUNTEST IDLE 1003 TCK ENDSTATE IDLE; ! ! ! !CHECKING SILICON ID ! ! ! SIR 10 TDI (203); RUNTEST 8 TCK; SDR 13 TDI (0089); SIR 10 TDI (205); RUNTEST 8 TCK; SDR 16 TDI (FFFF) TDO (8232) MASK (FFFF); SDR 16 TDI (FFFF) TDO (2AA2); SDR 16 TDI (FFFF) TDO (4A82); SDR 16 TDI (FFFF) TDO (8C0C); SDR 16 TDI (FFFF) TDO (0080);方案思路:因為.svf文件描述的是JTAG的編程細節,只要我們從.svf文件中提取出相應數據,包括指令數據、輸入輸出數據等,然后按照對應指令執行即可。
例子:
該語句表示發送10位指令數據0x203;通過算法處理該語句,提取出該語句的有效信息為"IR"指令、“10"位數據、數據為“0x203”,MCU模擬JTAG編程時,先匹配命令"IR",再發送相應位數的指令數據即可,其他命令同理可得(提取算法需要自己寫,可用Qt的正則表達式提取)。
//命令可以用如下數據對應typedef enum{RESET_CMD = 0x00,IDLE_CMD = 0x01,RUN_TCK = 0x02,RUN_IDLE_TCK = 0x03,SIR_CMD = 0x04,SDR_DIR = 0x05,SDR_TDO = 0x06,SDR_TDO_MASK = 0x07,INVALID_CMD = 0xFF}JTAG_CMD;重要提示:.jbc的編程波形幾乎與svf文件中描述的一致,所以可以通過.jbc文件的編程波形(由邏輯分析儀捕捉得到)分析、修改自己的代碼
NOTE:文章末尾有部分.jbc運行編程時測得的波形文件(由方案一得到,邏輯分析儀軟件為KingstVIS,方案一的波形與quratus II直接下載.jbc文件的波形主要區別于IDLE狀態下,方案一中TCK為低,quartus一直運行TCK)
由KingstVIS邏輯分析儀得到的.jbc編程波形
步驟一:
提取svf文件中的數據存到對應數組,分別存到命令數組、數據數組、TCK數組、TDI數組、TDO數組、MASK數組中
步驟二:
匹配對應命令,然后指令對應指令
NOTE:方案一源碼占用資源非常多,而且代碼量非常大,方案二幾乎不占用RAM資源,而且真正的代碼就只有一百多行,非常便于理解,同樣非常適用于RAM資源緊張的MCU中。
資料總結:
MCU模擬JTAG燒寫CPLD固件的文檔資料:https://download.csdn.net/download/weixin_42518229/12912882
Altera CPLD升級官方Demo 移植到STM32F103ZGT6工程
https://download.csdn.net/download/weixin_42518229/18944029
總結
以上是生活随笔為你收集整理的ALTERA CPLD离线烧写方案设计(MCU模拟JTAG)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java版商城之一件代发设置 Sprin
- 下一篇: 使用铝、金、铜做电极的CCD摄像机