<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 使用嵌入式處理器對可編程邏輯器件重編程

使用嵌入式處理器對可編程邏輯器件重編程

作者: 時(shí)間:2012-06-05 來(lái)源:網(wǎng)絡(luò ) 收藏

 1 引言

本文引用地址:http://dyxdggzs.com/article/148945.htm

  在系統里除了外還會(huì )經(jīng)常到可,有些可在被焊接到印制電路板上之后還可以對其程序進(jìn)行更新,這種特性稱(chēng)之為“在系統可重能力”(In SystemReprogrammability,ISR)。在單板開(kāi)發(fā)階段,通常下載電纜通過(guò)IEEE Standard 1149.1 JTAG接口對重編程。在產(chǎn)品原型及制造階段,單板上的JTAG接口很可能出于產(chǎn)品外形及內部結構設計的考慮已經(jīng)無(wú)法與下載電纜相連接,此時(shí)將無(wú)法通過(guò)下載電纜對邏輯器件重編程?;?a class="contentlabel" href="http://dyxdggzs.com/news/listbylabel/label/嵌入式">嵌入式系統的產(chǎn)品通常對外提供串行接口或以太網(wǎng)接口,這些接口由嵌入式來(lái)控制[1] ,因此可以通過(guò)這些接口將邏輯器件的更新程序發(fā)送到,由處理器對可編程邏輯器件重編程。

  2 實(shí)現方法

  2.1 軟件方面

  串行接口由于協(xié)議實(shí)現簡(jiǎn)單、占用資源少而被嵌入式系統廣泛,只需要使用串行接口連接線(xiàn)將主機的串行接口與產(chǎn)品的串行接口相連接,通過(guò)主機上的串行接口通訊軟件將更新程序發(fā)送給處理器即可,文件傳輸協(xié)議一般采用Xmodem協(xié)議;而對于基于嵌入式系統的網(wǎng)絡(luò )產(chǎn)品而言,由于自身提供以太網(wǎng)接口,而且操作系統內嵌TCP/IP協(xié)議棧,因此可以使用以太網(wǎng)接口將更新程序發(fā)送給處理器,文件傳輸協(xié)議一般采用TFTP協(xié)議,嵌入式系統運行TFTP服務(wù)器程序,主機上運行TFTP客戶(hù)端程序[2] 。

  嵌入式處理器通過(guò)串行接口或以太網(wǎng)接口接收到的可編程邏輯器件的更新程序是一種Jam文件,使用類(lèi)似于A(yíng)ltera公司Quartus II development tool的開(kāi)發(fā)工具根據Jam標準和測試語(yǔ)言(Jam Standard Test andProgramming Language 以下簡(jiǎn)稱(chēng)Jam語(yǔ)言)的要求由Programmer Object File (*.pof,文件后綴名為pof)一類(lèi)的目標文件轉換生成[3] 。Jam文件是一個(gè)ASCII文件,文件中包含了對可編程邏輯器件進(jìn)行編程的所有信息,包括編程算法和數據,詳細介紹如下:

 ?。?)“注解字段”部分存儲了Jam文件的相關(guān)信息,包括可編程邏輯器件的名稱(chēng),Jam文件的創(chuàng )建時(shí)間,使用的Jam語(yǔ)言的版本等等。

 ?。?)“變量聲明/初始化”部分由編程/校驗的數據和Jam文件用到的一些變量聲明組成。

 ?。?)“算法部分”包含了對可編程邏輯器件編程需要用到的命令和代碼,包括空白檢查、擦除、編程和校驗等等所有可以在可編程邏輯器件上執行的功能。在代碼中可以使用分支或循環(huán)結構。

  嵌入式處理器在接收到Jam文件之后通過(guò)運行一個(gè)Jam Player程序來(lái)解析這個(gè)Jam文件,翻譯文件中每一條指令,并對JTAG端口進(jìn)行數據的讀寫(xiě)操作,從而完成對ISR可編程邏輯器件程序的更新工作。Jam Player是一個(gè)C語(yǔ)言程序,其main主程序執行所有的基本功能,包括對Jam文件內容的解析,指令的翻譯等,這部分內容對于所有的嵌入式系統和Jam文件來(lái)說(shuō)都是一樣的。而Jam Player的I/O功能,包括I/O管腳的尋址、延時(shí)程序、文件的I/O以及操作系統相關(guān)的功能都包含在jamstub.c文件里,通過(guò)修改這個(gè)文件Jam Player可以適用于任何系統結構。當Jam Player接收數據的時(shí)候,jamstub.c能夠從Jam文件取回數據,或者從TDO管腳移位讀取數據。jamstub.c也能將處理過(guò)的JTAG數據發(fā)送到3個(gè)JTAG管腳(TDI、TMS和TCK),將出錯消息和相關(guān)信息返回給調用程序。升級ISR可編程邏輯器件的程序只需要改變Jam文件。

  Jam Player通過(guò)一個(gè)jam_jtag_io函數(int jam_jtag_io(int tms_tdi))來(lái)控制對JTAG接口的讀寫(xiě)操作。每次調用這個(gè)函數的時(shí)候,JTAG的TMS和TDI輸出信號將被設定為需要的值,而TDO輸入信號將被采樣,值將被返回,之后TCK時(shí)鐘信號將產(chǎn)生一個(gè)下降沿。tms_tdi參數包含3比特信息,分別指示TMS信號和TDI信號的狀態(tài)以及是否需要讀取TDO的輸出(如果不需要用到TDO的值則可以跳過(guò)對TDO的讀取操作)。最低位比特代表TMS的值,第2位比特代表TDI的值,第3位比特指示是否讀取TDO:如果置位,則必須讀取TDO的值,否則不需要。如果TDO為低電平,返回零值,高電平則返回非零值。如果沒(méi)有對TDO進(jìn)行讀取也將返回零值。

  2.2 硬件方面

  嵌入式處理器與JTAG 器件連接的方法有兩種,一種是直接將嵌入式處理器與JTAG 器件連接起來(lái),這種方法處理器需要有專(zhuān)門(mén)四個(gè)管腳用于JTAG 接口,節省了電路板空間的同時(shí)卻占用了處理器的四個(gè)管腳;另一種方法通過(guò)一個(gè)接口邏輯將JTAG 器件連接到處理器的總線(xiàn),處理器通過(guò)JTAG 器件對應的地址來(lái)對其進(jìn)行讀寫(xiě)操作[4] 。

  圖1 給出了接口邏輯的一個(gè)范例。當接口邏輯收到正確的地址和控制信號,它將對TDI、TCK 和TMS信號進(jìn)行同步,并通過(guò)多路復用器驅動(dòng)輸出管腳,下載電纜也可以通過(guò)多路復用器對JTAG 鏈進(jìn)行編程或驗證[5] 。TDI、TCK 和TMS 信號的同步通過(guò)嵌入式處理器的時(shí)鐘信號和寄存器來(lái)完成,TDO 的緩沖區可以防止總線(xiàn)競爭,TDI、TCK 和TMS 的緩沖區在調試的時(shí)候還可以用來(lái)讀回寄存器的值。圖中的與門(mén)通過(guò)R/W 信號來(lái)控制執行讀或寫(xiě)操作,而AS 和DS 信號則可以在另一個(gè)級別上對電路進(jìn)行選擇和去選擇。

接口邏輯

圖1 接口邏輯

  2.3 內存使用情況

  下面討論使用嵌入式處理器對可編程邏輯器件重編程時(shí)內存的使用情況。為了能夠兼容沒(méi)有內存分配服務(wù)的嵌入式處理器,Jam Player 不僅需要程序存儲空間而且需要動(dòng)態(tài)內存。程序存儲空間(如硬盤(pán)驅動(dòng)器或ROM)用于存儲Jam Player 可執行二進(jìn)制文件和Jam 文件;動(dòng)態(tài)內存(如RAM)將在調用Jam Player的時(shí)候使用。

  Jam Player 按照下面的步驟來(lái)使用內存:

 ?。?)嵌入式處理器從ROM 中調用Jam Player;

 ?。?)Jam Player 從ROM 中讀取Jam 文件,然后把它存入RAM;

 ?。?)Jam Player 對Jam 文件中包含的壓縮程序數據解壓,并將解壓后的數據存入RAM;

 ?。?)Jam Player 在RAM 中初始化符號表(symbol table)、堆棧(stack)和堆(heap)。

  符號表包含Jam 文件的標記(labels)和變量(variables);堆棧用于FOR 循環(huán),CALL 和PUSH 語(yǔ)句;堆作為臨時(shí)內存用于數學(xué)表達式的求值以及填充數據的存儲。在處理Jam 文件時(shí)每碰到一個(gè)命令堆棧和堆大小都將增加,可用動(dòng)態(tài)內存越來(lái)越少,而Jam 文件、解壓縮后的數據以及符號表需要的動(dòng)態(tài)內存空間在整個(gè)過(guò)程中則保持不變。

  Jam Player 的內存使用情況如圖2 所示。

Jam Player 的內存使用情況

圖2 Jam Player 的內存使用情況

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

上一頁(yè) 1 2 下一頁(yè)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>