題:
編程微控制器:JTAG,SPI,USB哦,天哪!
jdiaz
2009-11-14 09:51:48 UTC
view on stackexchange narkive permalink

我已經註意到,關於微控制器,有幾種編程方法。我對USB很熟悉,因為可以通過USB對Arduino進行編程。

什麼是JTAG或SPI接口?

我最終知道這些接口提供了一種用新指令刷新芯片的方法,但是它們有何不同?一個人比另一個人有什麼優勢嗎?

五 答案:
bpijls
2009-11-14 15:49:23 UTC
view on stackexchange narkive permalink

ATMEGA微控制器(如arduino中的一種)是直接從工廠生產的,只能使用SPI或JTAG接口進行編程。

SPI表示串行外圍設備接口,是微控制器彼此之間或與外界進行通信的一種方式。有時也稱為3線,因為它使用三根線進行通信。要對芯片進行編程,您將需要一個特殊的編程器,該編程器會從USB讀取命令以驅動SPI線路來對芯片進行編程。流行的似乎是 Adafruit的USBTinyISP SparkFun是有關SPI編程的一個很好的介紹。用於Atmel AVR芯片編程的最受歡迎的應用程序是avrdude(cmd線),ponyprog(不適用於較新的程序員),在某些情況下(如果您的程序員支持,​​則是AVR Studio)。 SPI編程的優點是您可以直接從工廠編程任何Atmel芯片,因此您的項目中不一定總是需要Arduino。

其中SPI是“另一個”串行協議, JTAG是專門用於編程和調試微控制器的協議。並非所有Atmel micro都支持JTAG,但Arduino中使用的都支持。 JTAG協議可用於諸如“在線仿真”和調試之類的很酷的事情,這意味著它使您可以在微控制器實際運行時查看其狀態。為此,您需要一個特殊的程序員。看到了我對另一個問題的答案。

要使用USB對芯片進行編程,您必須首先使用SPI或JTAG的“ bootloader”對其進行編程。一旦加載了引導程序,就可以使用USB串行轉換器在任何PC上對系統進行編程。缺點是引導加載程序會佔用一些內存空間,並且該方法不允許您在芯片運行時查看其狀態。

儘管在新的ATMEGA上不提供串行引導加載程序(儘管在許多其他微控制器上可以使用串行引導加載程序)是正確的,但聲稱必須使用SPI或JTAG的說法是錯誤的。 ATMEGA還支持高壓並行編程模式,該模式具有超越某些熔絲設置的能力,這會使更流行的在線編程方法不可行。 JTAG不是為微控制器編程而設計的,而是用於通過將值輸入和輸出IO引腳寄存器來測試PC板的。將其擴展用於編程或調試核心功能是後來的黑客。
SPI和系統內編程/串行編程不同。我也已經習慣了許多較小的Atmega MCU在SPI接口上具有串行編程引腳的事實,但是我被事實所困擾,在一些較大的Atmega MCU上,串行編程引腳不在SPI接口上。
tyblu
2010-12-29 16:57:32 UTC
view on stackexchange narkive permalink

雖然我想深入了解可用的各種編程方法,但其他人已經有了。這是 Dean Camera 的有關AVRFreaks的教程, AVR編程方法

有很多種方法程序AVRmicrocontrollers。由於很多人一次或一次都在詢問不同的問題,因此我想在這裡將它們概述出來,以便快速,有效地回答他們的問題。如果我錯過了方法或出錯了,請原諒我。

方法1:在系統編程(ISP)中

支持者:絕大多數AVR(請參閱以下文章)
受支持的程序員: AVRISP MKI / II ,JTAG MKII,STK500,STK600,Dragon,AVRISP克隆,AVR910編程器,AVRONE

在SystemProgramming中,可能是對整個AVR線的閃存,EEPROM,熔絲和鎖字節進行編程的最常見方法。 ISP可以以極高的時鐘頻率對AVR進行編程(假設目標AVR運行在高頻率下,並且程序員支持它),並且是幾乎所有AVR愛好者的選擇方法。市場上除了簡單的方法外,還有很多很多AVRISP克隆和AVR910程序員。自己的加密狗連接到計算機的並行端口。

最近的新加密狗設計可能會使用計算機的串行端口,但是偶然的證據表明,由於技術上的限制,該方法非常慢。 p>

ISP要求目標AVR的時鐘速率至少是ISP時鐘速率的四倍。這是一個常見的陷阱,也給許多AVR初學者帶來困惑。

方法2:JTAG

支持者:請參閱AVRStudio工具中有關MKI和MKII的幫助設備支持
支持的編程器: JTAG-ICE,JTAG-ICE MKII,Dragon,JTAG-ICEclones,AVRONE,STK600(僅編程)

從技術上講,JTAG是調試系統,而不是編程方法。儘管如此,JTAG接口仍允許對支持它的AVR進行編程。

JTAG是一種系統內調試工具,它使您可以在電路中運行時,控制和檢查受支持的AVR的狀態。 JTAG允許用戶隨時停止執行,操縱AVR的內部寄存器等等。

ATMEL的官方JTAG-ICE單元已被JTAG-ICEMKII取代,它支持更新的,並且在整個AVRrange DebugWire調試協議以及通過ISP方法進行編程(請參見上文)。

JTAG-ICE克隆的價格低廉,但是它們與少數幾個AVR的有限兼容性限制了它們的實用性。 AVR支持JTAG接口,JTAG-ICE仍然是一種非常有效的調試方法和編程器。

方法3:DebugWire

支持者:許多較小的AVR
支持的編程器: JTAG-ICE MKII,Dragon,AVRONE

再次使用DebugWire是一種調試而非編程接口,但可用於將程序加載到支持的AVR中。 dW接口使用單個AVR引腳(/ RESET線)進行所有通信,因此非常適用於低引腳數AVR設備。

方法4:引導加載程序

最新的AVR
受支持的編程器:不適用

從技術上講,這不是編程方法。引導加載程序是一個小型AVR程序,它位於用戶中引導加載程序利用了更新的AVR中可用的flashself-modification功能,以允許AVR通過從外部源加載的程序數據對自身進行編程。引導加載程序可以從任何位置(例如,外部數據閃存或SD卡)獲取數據,但到目前為止,最常見的引導加載程序類型是通過AVR的RS-232(串行)端口與aPC進行通信。

引導加載程序受到限制,因為它們會消耗閃存空間(限制AVR應用程序可用的閃存大小),並且它們無法

引導加載程序可以從Internet上廣泛下載,但是它們遇到了“雞和蛋”問題。首先,您需要使用此處列出的另一種類型的編程器來對Bootloader進行編程。通常可以通過構建簡單的並行端口加密狗(請參閱ISP部分)或購買已經預加載Bootloader的AVR(例如AVRButterflyboard)來解決。 p>

METHOD 5:高壓並行編程(HVPP)

支持者:大多數非TINY AVR(例外)
支持的編程器: STK500,STK600,Dragon,自製軟件加密狗,AVRONE

高壓並行編程是一種很少使用的編程方法,因為它需要設置麻煩。儘管如此,HVPP編程通常用於“復活”通過另一種編程方法誤配置了保險絲的AVR。

STK500和Dragon支持HVPP。在HVPP期間,目標的/ RESET引腳被升高到異常高的12V值,從而與內部並行編程電路配合使用。 / RESET引腳是AVR的唯一引腳(在HVPP支持的AVR上),可以安全地升高到此級別。

您可以使用諸如此類的在線計劃使自己的HVPP加密。 > METHOD 6:高電壓串行編程(HVSP)

支持者:許多TINY AVR(例外)
支持的編程器: STK500 ,STK600,Dragon,Homebrew Dongles,AVRONE

HVSP與HVPP相似,只是數據傳輸是串行而非並行執行的。這是在許多沒有足夠HVPP引腳的TINY系列AVR上使用的備用編程方法。

METHOD 7:PDI

支持者: XMEGA AVR
受支持的編程器: STK600,AVRONE,JTAG MKII,Dragon,AVRISP MKII

PDI是基於debugWire協議的AVR XMEGA系列的新編程接口。不是

方法8:TPI

支持者: 6針TINY AVR(ATTINY10等) 支持的編程器: STK600,Dragon,AVRISP MKII

TPI是用於帶有限制引腳(例如6引腳ATTINY10)的新型TINY AVR系列的非常簡潔的編程接口。與W一樣,TPI使用設備的/ RESET線作為通信接口的一部分,但是相似之處結束了。由於體積小巧的TINY AVR缺少片上調試電路,因此TPI協議使用半雙工協議中的三個引腳的新編程接口。由於設置設備的RSTDSB引腳時,需要將/ RESET線提高到+ 12V進行編程,因此,目前只有較新的STK600編程板才支持。

獎金常見問題解答部分!

  1. 哪種方法最好?
    沒有通用的“最佳”方法。 ISP編程非常簡單,而且非常受歡迎,但是上述所有方法都可以使用。兩種高壓編程模式(無論哪種模式都適用於您的設備)是功能最豐富的,因為它們可以修復保險絲配置錯誤的AVR。但是,這些方法很難設置,因此大多數用戶都選擇使用ISP。

  2. 我已經製作了一個並行端口加密狗。我可以在AVRStudio上使用它嗎?
    我不是很討厭。 AVRStudio不能與任何“啞”軟件狗連接-它需要一個智能編程設備-本身包含一個微控制器-才能解密它發送的通信協議。沒有微控制器的簡單加密狗必須自己“位敲打”(即通過加密狗通過計算機模擬的適當信號)。

  3. 那麼我的加密狗就沒用了嗎?
    否。您仍然可以使用第三方編程軟件工具通過家用加密狗進行編程。 AVRDude是一種很好的,已知的免費命令行實用程序-它包含在WinAVR軟件包中。

  4. 如果我希望我的程序員使用AVRStudio,我有哪些選擇?
    選擇使用支持AVRStudio的協議的程序員。這可以是簡單的“ AVR910”協議(不建議使用),也可以是STK500 / AVRISP使用的協議的自定義實現。請注意,這些編程器中都需要一個微控制器,導致catch-22狀況。可以通過在購買時使用適當的固件對程序員的AVR進行預編程,或通過用abootloader對其進行預編程來解決此問題。

  5. 好,我想使用引導加載程序。我要如何首先將其安裝到那裡?!
    要在AVR中使用引導加載程序,首先必須對引導加載程序進行編程。如果您沒有現有的編程器(即使是簡單的傻瓜加密狗也足夠了對於初始編程),您可以從多個供應商那裡購買使用引導程序預先編程的AVR。 >

    幫助!使用ISP時,我搞砸了保險絲,弄壞了我的AVR!最常見的錯誤是將時鐘選擇保險絲更改為無效的設置。嘗試在AVR的XTAL1引腳上放置一個外部時鐘,看看是否有幫助。
    如果失敗,請使用高壓方法之一。這些將解決所有錯誤配置,包括那些涉及時鐘源的錯誤配置,因為高壓方法會將其自己的時鐘提供給AVR進行編程。

  6. 如何與編程器交互? / em>
    您使用哪種軟件與編程器交互,取決於您使用的編程器類型。
    簡單的“啞”加密狗需要第三方軟件,例如PonyProg或AVRDude。這些可能是命令行或GUI工具-在網上環顧四周,您將根據自己的需要進行調整。在工具菜單上,選擇 單擊“ AVRProg”選項以打開GUI屏幕以與您的編程器進行交互。或者,第三方工具(如AVRDude)也可與AVR910兼容。
    官方工具已緊密集成到AVRStudio中,尤其是在調試版本(JTAG / Dragon / etc)的情況下。從AVRStudioTools菜單中,選擇“ ProgramAVR ...”子菜單,然後單擊“連接”項。在新窗口中,選擇您的工具及其連接界面,然後單擊“確定”。
    以傻瓜加密狗和AVR910程序員為例,官方工具也可以與第三方編程軟件一起使用。 ol>

    (C)教務長相機,2009年。保留所有權利。未經事先明確許可,不得在除AVRFreaks.net以外的任何網站上進行複制。 >

Kortuk
2009-11-15 14:51:53 UTC
view on stackexchange narkive permalink

我想在討論中再增加一件事。

SPI是芯片非常常見的接口。對3線的暗示是SPI的模式,在這種模式下您不使用芯片的選擇引腳。

I2C是接口的主要競爭者,因為無論芯片數量如何,它僅使用2線。 SPI的每個接口都需要另一根導線,但速度較慢。

在教學時,我考慮講授有關接口的最重要任務之一。

社區Wiki可用於那些希望擴展其上的人我的信息。

我從來沒有聽說過I2C被用作微控制器上的本機閃存編程接口,儘管沒有理由不能成為我所認為的引導加載程序的入口點...
我只是將@vicatcu,添加為非常常見的界面。
JohnC
2009-11-14 15:36:52 UTC
view on stackexchange narkive permalink

從總體上看,這些接口僅在哪些程序員和哪些微控制器支持它們方面有所不同。只要您在編程器和微控制器之間具有匹配關係,我就不會擔心。

深入了解它,您會發現它是接口在微控制器上使用的引腳更重要的是-如果您將這些引腳用於傳感器,則在對設備進行編程時信號可能會干擾。如果出現問題,最簡單的解決方案是在編程過程中斷開傳感器的連接。

某些接口(包括JTAG)允許調試設備-但隨後您需要一個程序員(和驅動它的軟件)支持這一點。在一個上一個問題中,我指著Dragon調試AVR設備-我打算在我當前的一輪項目接近完成時就拿一個並玩。

old_timer
2012-01-17 02:13:28 UTC
view on stackexchange narkive permalink

正如您提到的串行,spi(2線,3線?),usb,jtag,swd等都被使用。

是的,這是有利有弊。例如,對於我所知的所有有關硬件內置Jtag的情況,最初都是將Jtag用於處理器調試以外的其他用途,但他們碰巧也將其用於硬件。如果有jtag可用,則通常是出於這個原因的最佳接口,但是也有例外。例如,如果這些引腳不是專用於jtag的,則您可能在代碼中存在錯誤,並且/或者有意將這些引腳之一用於其他用途,從而使得無法使用jtag來訪問芯片(如果它在閃存中引導軟件,重新使用這些引腳)。另一個例外是如果處理器內核可以被閃存中軟件中的錯誤掛起,並且掛起的內核無法通過jtag進行調試。我會稱其為硬件設計中的錯誤,但最近在商業方面已對此問題進行了處理。

在AVR中,例如PDI,我認為人們可能在這裡稱呼spi,也許不是。至少在xmega上,pdi和外部jtag會在內部饋入通用的pdi接口。因此,pdi引腳使您可以直接訪問此端口,而不是jtag開銷。只要該接口在Flash中的軟件已成為核心時起作用,那麼它將是該系列的理想接口。該協議已發布且相對簡單,並內置於硬件中。它確實具有雙向數據總線(如i2c)的缺點。

Arm的jtag帶有稱為swd的導線較少,因此不必公開發布。開源工具正在實現它。從理論上講,這是一個串行jtag,不同的jtag信號以某種方式在一條線上順序發送,而不是在多條線上並行發送。在部件內部,我認為它會再次並行化並提供正常的jtag邏輯。這有一個缺點,即ARM希望將其保留為半秘密,而ARM的jtag調試器無論如何都很難使用。所以這是很多工作。如果/當openocd開始運行時,則可能是另一回事了。您還必須擔心重新使用的引腳以及懸掛的內核會發生什麼。一個或三個被拉出取決於您從哪個閃存啟動。因此,您可以從用戶閃存啟動,也可以從至少在出廠時具有基於串行端口的引導加載程序或具有基於USB的引導加載程序的閃存啟動。對於每個供應商而言,這些軟件解決方案可能並且確實會有所不同,串行協議以微妙的方式變化甚至超過微妙的方式,USB解決方案可能會發生很大變化。好的和壞的是,您可以使用其中的某些閃存,因此您可以選擇更改串行引導加載程序,這既有好處,也有壞處,好處是您可以選擇根據產品對其進行自定義,但有可能意外擦除它並砌成零件,至少在該接口上砌成磚。

Jtag工具曾經要花費數千美元,現在卻不用了,大約15美元就可以得到一個ftdi分支板,並用openocd對其進行重新利用。只需花費$ 50,您就可以獲得基於ftdi的usb解決方案,該解決方案可與openocd一起使用。您可以獲得$ 75- $ 80美元的非商業性j-link。然後是幾千美元的快速,確定但不值得的錢。當您是一家擁有大量現金並希望支付支持費用的大型公司時,您就可以購買這些產品。當您支付這些價格時,您將獲得所需的產品,並且您會立即獲得技術支持問題的答案。像免費的Linux vs Windows或RHEL這樣,Linux支持是免費的,但是您得到的就是所得到的。無論如何,這會使jtag更具吸引力,它通常是功能最強大的解決方案,我建議您在任何時候都可以找到這些工具(在負擔得起的地方)。負擔得起的地方。 sparkfun具有基於ftdi的usb到串行板,並且ftdi部件可重新用於大型保險槓,您可以將它們用於spi或i2c或pdi或jtag或其他接口。理想情況下,為您感興趣的總線/零件製造電路板,並使用其隨附的免費/開源軟件。還要使用這些串行板,理想情況下,應具有3.3V和5V的電源(每個lillypads和arduino mini等所用的電源約15美元),用於連接具有某種串行協議的各種微型計算機的串行端口。我發現根據這些協議編寫自己的加載器會更容易,尤其是像arduino / avr這樣的人,他們會發布引導加載程序源,並且是他們支持的假定標準的重要子集。 YMMV。

簡而言之,沒有一個好的解決方案,它們各有利弊。準備支持其中至少兩個。 usb和序列或usb和jtag或jtag和序列等。只需在板上放下焊盤或針孔即可,不一定要填充。對於您的個人或實驗室開發,有一套完整的工具,當您準備積木,恢復板子或開發自己的引導程序,USB固件等時,準備從一種切換到另一種。


該問答將自動從英語翻譯而來。原始內容可在stackexchange上找到,我們感謝它分發的cc by-sa 2.0許可。
Loading...