步驟1:FTDI或串行上傳
FTDI實(shí)際上是芯片品牌。 FTDI公司專門研究用于通過USB連接的芯片。在Arduino領(lǐng)域,USB轉(zhuǎn)串口芯片用于將運(yùn)行Arduino IDE的計(jì)算機(jī)連接到Arduino的主處理器,以上傳新草圖并通過串行監(jiān)視器窗口與草圖交互。 USB轉(zhuǎn)串行芯片與Arduino上ATMEL處理器的UART接口連接。
為了使Arduino從串行接口接受草圖,它運(yùn)行了一個名為自舉程序的程序,該程序接受該草圖并將其寫入閃存。引導(dǎo)加載程序?qū)嶋H上位于閃存地址較高范圍內(nèi)的一小部分,保留供引導(dǎo)加載程序使用。引導(dǎo)加載程序接收到草圖后,它將存儲到閃存的下部。
此串行編程使用稱為TTL串行的協(xié)議。它基于稱為RS-232的舊通信協(xié)議。 RS-232通信使用的電壓會從3到25伏的正電壓迅速變?yōu)?3到-25伏的負(fù)電壓。個人計(jì)算機(jī)通常不再配備RS-232接口,但幾年前就已使用。具有此類接口的PC通常使用在12至-12伏之間擺動的電壓來發(fā)送RS-232信號。 Arduino上的ATMEL處理器使用0到5伏范圍內(nèi)的信號。與Arduino處理器可以處理的電壓范圍兼容的RS-232協(xié)議版本稱為TTL串行,有時您可能會聽到它稱為TTL-232或僅串行。
大多數(shù)Arduino都內(nèi)置有USB轉(zhuǎn)串行適配器芯片,因此您可以將Arduino直接連接到計(jì)算機(jī),而無需任何特殊接口或編程器。一些Arduino,例如LilyPad,Mini和Pro Mini,沒有配備USB到串行適配器,您需要提供自己的外部適配器。即使芯片的品牌不是FTDI,外部適配器也經(jīng)常被稱為FTDI適配器。
串行通信涉及多條電線或連接。最重要的稱為RX(接收的簡稱)和TX(發(fā)送的簡稱)。
顧名思義,RX導(dǎo)線或引腳從另一個設(shè)備接收。它偵聽傳入的通信。 TX導(dǎo)線或引腳將數(shù)據(jù)傳輸?shù)搅硪粋€設(shè)備。 USB到串行適配器的TX線以一種模式在0伏至5伏之間快速切換,并將其連接到正在監(jiān)聽這些模式的Arduino處理器的RX引腳上。
通信是雙向的,因此Arduino的處理器可以將信號發(fā)送回USB到串行適配器。處理器使用其自己的TX引腳將信號發(fā)送到USB到串行適配器的RX引腳。 USB到串行適配器通過USB電纜在Arduino和您的計(jì)算機(jī)之間來回轉(zhuǎn)換信號。
計(jì)算機(jī)將草圖發(fā)送到Arduino,并從Arduino接收回來,因此計(jì)算機(jī)可以驗(yàn)證程序是否加載正常。您在Arduino上運(yùn)行的草圖可以使用相同的串行連接,以通過串行監(jiān)視器窗口與您通信。通常使用此方法調(diào)試草圖,因?yàn)槟梢栽诖a中的關(guān)鍵位置撒上Serial.print語句,以報告變量的值或告訴您代碼當(dāng)前正在做什么。然后,您可以將數(shù)據(jù)(例如傳感器或輸入引腳讀數(shù))發(fā)送回計(jì)算機(jī)。您還可以使用串行監(jiān)視器將數(shù)據(jù)從計(jì)算機(jī)發(fā)送到在Arduino上運(yùn)行的草圖。
您可能想知道當(dāng)串行通信試圖將其發(fā)送給草圖或僅進(jìn)行通信時,Arduino如何知道通過串行監(jiān)視器以及已經(jīng)在Arduino上運(yùn)行的草圖?答案很簡單。接受草圖并重新編程Arduino的引導(dǎo)程序僅在Arduino的處理器復(fù)位后的最初幾秒鐘內(nèi)運(yùn)行。如果在Arduino上運(yùn)行的bootloader程序未接收到一定的字符序列,表明正在嘗試上傳草圖,則退出運(yùn)行并啟動先前加載的草圖。
首次開發(fā)Arduino時,將草圖上傳到Arduino的人必須在上傳過程開始時立即按Arduino上的Reset按鈕,然后正確計(jì)時,或重試。更高版本的Arduino使用了另外一個稱為DTR的串行協(xié)議線來自動重置Arduino。由于在開始與Arduino的新連接時DTR信號從5V變?yōu)?,因此如果將此信號發(fā)送到Arduino處理器的復(fù)位線,它將復(fù)位。如果要建立新的串行連接的原因是因?yàn)锳rduino IDE正在向啟動加載程序發(fā)送草圖,則啟動加載程序會繼續(xù)并接受該草圖并將其存儲。如果要建立新的串行連接的原因是因?yàn)槟诖蜷_Arduino IDE的串行監(jiān)視器,則Arduino會重置,引導(dǎo)加載程序會運(yùn)行足夠長的時間以意識到IDE不會嘗試發(fā)送草圖,而您先前上傳的開始運(yùn)行。
了解這些信號(例如用于自動重置的DTR信號)很有用,尤其是當(dāng)您要將USB串行適配器正確連接到未內(nèi)置適配器的Arduino時,尤其如此,例如LilyPad,Mini或Pro Mini。或者,如果您想對Arduino問題進(jìn)行故障排除,或使用另一個Arduino編程。我在上一段中提到,在建立新連接時,DTR信號將從5V變?yōu)?。好吧,這個信號變低,并在整個連接期間保持低電平。如果該信號直接連接到處理器的復(fù)位引腳,則處理器將保持復(fù)位狀態(tài),并且永遠(yuǎn)不會開始運(yùn)行引導(dǎo)加載程序或您先前上傳的草圖。
所以,這就是竅門:DTR信號通過一個小電容器發(fā)送到處理器的復(fù)位引腳。電容器將來自DTR信號的電壓(變?yōu)榈碗娖讲⒈3值碗娖剑┺D(zhuǎn)換為一個臨時尖峰,該尖峰變?yōu)?V,然后又回到5V。這將重置Arduino,并使其啟動引導(dǎo)加載程序,隨后引導(dǎo)加載程序開始繪制草圖。
USB到串行適配器需要在計(jì)算機(jī)上加載驅(qū)動程序,因此計(jì)算機(jī)將了解如何與其通信。真正的Arduino使用USB到串行適配器的特定型號列表,因此IDE可以與您可能需要的所有驅(qū)動程序一起預(yù)先打包。如果您使用的是由arduino.cc或其合作伙伴制造商以外的其他人制作的克隆,假貨,衍生產(chǎn)品,自制的或其他不受支持的開發(fā)板,那實(shí)際上很好,因?yàn)樗情_源硬件和軟件。任何人都可以做到。但是開發(fā)板可能會使用USB到串行適配器,該適配器需要用于您計(jì)算機(jī)的驅(qū)動程序,并且未包含在Arduino IDE的軟件下載中。 CH340G USB轉(zhuǎn)串口芯片就是一個例子,這種芯片在eBay和Amazon上銷售的Arduino兼容板上非常常見。對此有所了解對您很有幫助,因此您可以使用正確的驅(qū)動程序來準(zhǔn)備計(jì)算機(jī)。
這種與Arduino處理器發(fā)生的串行通信通常通過處理器上專用于TTL串行通信的專用引腳進(jìn)行。該處理器具有稱為UART的特殊硬件,該硬件可以處理從TX引腳發(fā)送數(shù)據(jù)或在RX引腳接收數(shù)據(jù)。處理這些信號的邏輯是非常基本的內(nèi)置于處理器中的。如果您不使用處理器上的RX和TX引腳通過UART進(jìn)行串行通信,則這些引腳可用于執(zhí)行其他操作,例如激活繼電器,晶體管,LED或從傳感器接收數(shù)字信號。如果不被串行信號占用,它們只是普通的數(shù)字引腳。一些處理器芯片具有多個UART,因此有幾組RX和TX引腳。如果處理器的UART部分不使用這些引腳進(jìn)行串行通信,這些引腳也是普通數(shù)字引腳。
引導(dǎo)加載程序可以設(shè)計(jì)為使用處理器上的幾乎所有引腳通過任何協(xié)議接受草圖。處理器具有多種引腳,它們是普通數(shù)字引腳,但可以選擇將這些引腳用于特殊協(xié)議。例如,有一組引腳可用于IIC或I2C協(xié)議,這是一種能夠與多個設(shè)備通信的特殊串行總線協(xié)議。還有另一組引腳可用于SPI協(xié)議,這是用于與設(shè)備通信的另一種不同的串行總線協(xié)議。處理器具有特殊的硬件,旨在在各種專用引腳上實(shí)現(xiàn)這些不同的協(xié)議,并且處理這些信號的邏輯在非常基本的層次上內(nèi)置于處理器中。
Twister#1:各種協(xié)議(例如TTL串行,I2C和SPI)具有內(nèi)置在處理器中的低級邏輯,用于在協(xié)議的特定引腳連接到另一臺設(shè)備時處理協(xié)議,但是可以通過編寫模擬處理器內(nèi)置邏輯電路行為的軟件來實(shí)現(xiàn)協(xié)議以在處理器的任何數(shù)字引腳上工作。這稱為“敲打”。可以編寫程序以符合協(xié)議要求或規(guī)范的方式驅(qū)動引腳。例如,可以編寫使用處理器的非UART引腳的軟件串行協(xié)議。然后,該軟件將代替硬件UART電路。如果您原本會用于特定協(xié)議的引腳被占用,并且您需要使用其他引腳,則這很有用。或者,如果您想擁有多個內(nèi)置串行接口。例如,ATmega328P處理器只有一個UART,并且使用數(shù)字引腳0和1。它通常一次只能與一個其他串行設(shè)備進(jìn)行通信。如果要在引腳2和3上連接另一個串行設(shè)備,則可以使用位串行協(xié)議的軟件串行程序來實(shí)現(xiàn)。可以編譯Optiboot引導(dǎo)加載程序,以通過非UART引腳上的軟件串行進(jìn)行通信。
Arduino通常會安裝一個串行引導(dǎo)加載程序,該串行引導(dǎo)加載程序使用ATMEL處理器上的硬件UART,并且計(jì)算機(jī)上運(yùn)行的Arduino IDE旨在與該引導(dǎo)加載程序進(jìn)行通信。
Twister#2:您不需要引導(dǎo)程序!
第2步:ISP編程
ISP也稱為ICSP。它是在線串行編程。與TTL串行相比,這是另一種串行。它是SPI(串行外圍設(shè)備接口總線),并使用3條主線進(jìn)行通信以進(jìn)行編程。當(dāng)您使用ISP對Arduino的處理器進(jìn)行編程時,通常會擦除包括引導(dǎo)加載程序區(qū)域在內(nèi)的整個處理器芯片內(nèi)存,并寫入您的草圖。因此,當(dāng)您使用ISP將草圖上載到Arduino時,Arduino不再具有引導(dǎo)加載程序。這意味著您還必須使用ISP上傳上傳到下一個草圖。您還可以使用ISP將引導(dǎo)加載程序放在Arduino上。這稱為刻錄引導(dǎo)加載程序。使用ISP上傳草圖后,您可能需要執(zhí)行此操作以更改或升級引導(dǎo)加載程序,或?qū)rduino恢復(fù)為正常操作。
您可能想將草圖上傳到帶有ISP的Arduino,因?yàn)槟M輬D在上電或重置后立即開始,或者因?yàn)槟幌M遢d引導(dǎo)程序接受其他草圖或嘗試使用串行引腳或閃存引腳13。
要進(jìn)行ISP編程,您需要ISP編程器。有許多與Arduino兼容的程序員,他們通常是插入USB或安裝在USB電纜末端的小型設(shè)備,并且具有連接至Arduino的連接器或電線。通常將編程器連接到Arduino的ICSP接頭,該接頭是一組排成三排的2針公引腳。
您還可以使用Arduino作為ISP編程器來編程另一個Arduino。 Arduino IDE附帶有一個名為ArduinoISP的示例草圖,您可以將其上傳到Arduino,然后成為ISP程序員。在Arduino IDE中的“工具”,“程序員”下的菜單中,選擇“ Arduino as ISP”。由于您只需花幾美元就可以得到克隆的Nano,Pro Micro或其他Arduino,因此除非有方便,否則幾乎不需要購買專用的ISP編程器設(shè)備。
因此,如果您有兩個Arduino,請繼續(xù)并開始嘗試ISP編程。您不太可能將任何事情弄糟,并且您將學(xué)習(xí)。為此,請打開ArduinoISP草圖,必要時對其進(jìn)行修改,然后將其上載到并準(zhǔn)備程序員Arduino。然后將編程器Arduino連接到目標(biāo)Arduino,并對目標(biāo)Arduino進(jìn)行編程。
步驟3:確定要使用的引腳
ISP編程的布線,您需要將編程器的MISO線連接到目標(biāo)Arduino的MISO。將編程器的MOSI導(dǎo)線連接到目標(biāo)的MOSI。將SCK連接到SCK。將5V連接至5V,并將GND連接至GND。將用于從機(jī)復(fù)位的任何引腳連接到目標(biāo)的RST引腳。為了幫助您理解和理解所有這些,接下來的幾段將提供很多詳細(xì)信息。
請注意,在某些教程,原理圖和數(shù)據(jù)表中,您可能會看到SCK或SCLK。這些標(biāo)簽都是同一功能“串行時鐘”的縮寫。在此Instructable中,我使用SCK。
從UNO開始,如果您查看電路板上和原理圖上的UNO ICSP插頭的引腳排列,您會發(fā)現(xiàn)引腳的編號是這樣的:/p》 D12 MISO 1 。 。 2 VCC
D13 SCK 3 。 。 4 MOSI D11
RST 5 。 。 6 GND
板上應(yīng)該有一個圓點(diǎn)或方形墊,用于顯示ICSP接頭連接器的針腳1是什么。在UNO上,即標(biāo)題的左上角。在UNO上,ICSP接頭連接器上的所有引腳都直接連接到板上,并且是板上其他地方可用的引腳的副本。標(biāo)頭的針腳1是數(shù)字針腳12的副本;引腳3與數(shù)字引腳13相同,依此類推。這就是為什么如果您在網(wǎng)上查看許多教程,就會發(fā)現(xiàn)它們顯示的是引腳11、12和13的使用,而不是使用ICSP標(biāo)頭。
在所有基于ATmega328P的Arduino(例如Pro Mini,Mini,Nano,Duemilanove和RedBoard,Metro328等衍生產(chǎn)品上),都應(yīng)用了相同的引腳分配。如果您的Arduino沒有ICSP接頭,請使用引腳10、11、12和13。
看看Leonardo,您必須比原理圖和電路板更深一些。該示意圖有點(diǎn)混亂,因?yàn)樵趦蓚€位置顯示了處理器,而未顯示MOSI,MISO和SCK線的Arduino引腳號。您需要查看IDE應(yīng)用程序目錄中的variants/leonardo/pins_arduino.h文件,以找出引腳號。
D14 MISO 1 。 . 2 VCC
D15 SCK 3 。 . 4 MOSI D16
RST 5 。 . 6 GND
當(dāng)您環(huán)顧一下Leonardo上的引腳時,您會看到除了ICSP接頭連接器之外,其他任何地方都沒有數(shù)字引腳14、15和16。因此,如果您有Leonardo,則不能完全按照所找到的教程來說明與外部邊緣插針11、12和13的連接,并且必須使用ICSP接頭。這意味著要適應(yīng)您嘗試使用的教程,使用從閱讀本Instructable中獲得的足夠知識,并進(jìn)行大量研究和閱讀以熟悉Leonardo。
在基于ATmega32U4的Arduino(例如Micro,Pro Micro,Esplora)上,如果Arduino沒有ICSP接頭,則使用引腳10、16、14和15。
如果您使用的是Arduino IDE 1.6.5或更早版本隨附的ArduinoISP草圖,則在使用Leonardo時,默認(rèn)情況下從復(fù)位引腳未設(shè)置為10。閱讀此步驟的其余部分以獲取詳細(xì)信息。如果您使用的是arduino.cc上的Arduino IDE的1.6.6版或更高版本,您會注意到該草圖只是將從屬重置引腳設(shè)置為引腳10,因此您可以跳過閱讀此步驟的其余部分,然后繼續(xù)進(jìn)行步驟4
在深入研究Leonardo原理圖和pins_arduino.h文件時,您會發(fā)現(xiàn)有些東西是SS引腳為數(shù)字引腳17,并且到達(dá)RXLED,并且在任何插頭上均不可用。當(dāng)您在Arduino IDE中加載ArduinoISP示例草圖并對其進(jìn)行查看時,這一點(diǎn)很重要的原因顯而易見。 RESET線設(shè)置為SS,這是UNO上的引腳10,但是Leonardo上的引腳17。這是您需要連接到目標(biāo)Arduino的RST引腳的電線。因此,為了在Leonardo上使用此草圖,您需要使用可以實(shí)際連接的可用引腳。將行更改為:
#define RESET SS
到
#define RESET 10
,而不是使用名稱為SS的引腳,而是將其分配給特定的引腳號。使用引腳10,這樣您就可以在任何Arduino上使用修改后的草圖。我認(rèn)為也許應(yīng)該編寫草圖以從引腳10而不是從SS引腳發(fā)送復(fù)位信號。
步驟4:從Uno到Leo
讓我們研究一下如何使用UNO作為ISP程序員對Leonardo進(jìn)行編程。將UNO上ICSP接頭連接器的所有引腳連接到Leonardo上ICSP接頭連接器,除了引腳5,即RST引腳。將UNO的引腳10連接到Leonardo的RST引腳(ICSP接頭的引腳5)。這樣做時,您將得到以下連接:
在編程器UNO上將11 MOSI引腳固定到目標(biāo)Leonardo上的16 MOSI引腳
在編程器UNO上將引腳12 MISO固定到目標(biāo)UNO上14目標(biāo)對象Leonardo
上的MISO引腳13編程器UNO上的SCK固定到引腳15 Leon編程對象UNO上的SCK固定到目標(biāo)Leonardo上的RST引腳
編程器UNO上的VCC到目標(biāo)Leonardo上的VCC
GND上編程器UNO上的VCC到目標(biāo)Leonardo上的GND
通過USB將UNO連接到計(jì)算機(jī)。 將ArduinoISP草圖上傳至UNO,然后在串行連接時通過在RST和GND之間連接一個10uF或更大的電容器來禁用自動復(fù)位。電容器的帶狀或負(fù)極引線連接至GND。當(dāng)計(jì)算機(jī)通過UNO將程序數(shù)據(jù)發(fā)送到Leonardo時,這將防止UNO重置和中斷ISP編程過程。
您的接線將如上圖所示。
在Arduino IDE菜單中,轉(zhuǎn)到“工具”,“開發(fā)板”,然后選擇“ Leonardo”。轉(zhuǎn)到工具,程序員,然后選擇Arduino作為ISP。轉(zhuǎn)到“工具,端口”,并確保已選擇要用作ISP編程器的UNO的端口。打開示例眨眼草圖。在菜單上轉(zhuǎn)到“草圖”(或IDE 1.6.4及更高版本上的“文件”),然后單擊“使用編程器上傳”。幾秒鐘后,眨眼草圖應(yīng)上傳到萊昂納多,并且LED應(yīng)該開始閃爍。您所做的全部操作將刪除Leonardo,并使用ISP安裝眨眼草圖。萊昂納多不再擁有引導(dǎo)加載程序。
如前所述,這意味著您還必須使用ISP上載到下一個草圖。從現(xiàn)在開始,您必須使用ISP對Leonardo進(jìn)行編程。為了驗(yàn)證這一點(diǎn),您可以繼續(xù)斷開Leonardo的連接,并用USB電纜將其連接起來,然后嘗試使用上傳過程將草圖上傳到其中。您會發(fā)現(xiàn)它不起作用。
如果您錯過了拔掉USB電纜并上傳草圖的功能,則可以使用ISP將引導(dǎo)加載程序放回Leonardo。這稱為刻錄引導(dǎo)加載程序。這將使Leonardo恢復(fù)正常運(yùn)行。
將您作為ISP程序員使用的UNO連接到Leonardo,就像上傳眨眼草圖之前一樣。這次,在菜單上依次選擇工具,刻錄引導(dǎo)程序。幾秒鐘后,您應(yīng)該在IDE底部附近看到消息Done Burning Bootloader。新的Bootloader已安裝在您的Leonardo上。現(xiàn)在,您可以使用USB電纜連接萊昂納多,并使用上傳過程將草圖上傳到萊昂納多。
步驟5:Leo to Uno
現(xiàn)在,使用Leonardo作為ISP程序員對UNO進(jìn)行編程,來研究相反的情況。將Leonardo上ICSP接頭連接器的所有引腳連接到UNO上的ICSP接頭連接器,除了引腳5(RST引腳)外。將Leonardo的引腳10連接到UNO的RST引腳(ICSP接頭的引腳5)。完成此操作后,您將得到以下連接:
在編程器Leonardo上將16 MOSI引腳固定到目標(biāo)UNO上的11 MOSI
在編程器Leonardo上的引腳14 MISO引腳上的固定目標(biāo)UNO上的12 MISO
將編程器Leonardo上的15 SCK引腳固定到目標(biāo)UNO上的13 SCK
編程器Leonardo上的引腳10到目標(biāo)UNO上的RST引腳
編程器Leonardo上的VCC到目標(biāo)UNO上的VCC
GND上編程器Leonardo上的VCC到目標(biāo)UNO上的GND
,它看起來像上圖。
從UNO卸下電容器。您不再需要了。
通過USB將Leonardo連接到計(jì)算機(jī)。將ArduinoISP草圖上載到Leonardo。如果使用的是Arduino IDE 1.6.5或更早版本附帶的ArduinoISP草圖,請m 確保已將示例草圖修改為如步驟3所述,將引腳10用作RESET發(fā)送引腳。使用Leonardo作為ISP程序員時,您無需禁用自動復(fù)位。
在Arduino IDE菜單中,轉(zhuǎn)到在“工具”上,然后選擇“ UNO”。轉(zhuǎn)到工具,程序員,然后選擇Arduino作為ISP。轉(zhuǎn)到“工具,端口”,并確保已選擇您要用作ISP編程器的Leonardo的端口。打開示例眨眼草圖。在菜單上轉(zhuǎn)到“草圖”(或IDE 1.6.4及更高版本上的“文件”),然后單擊“使用編程器上載”。幾秒鐘后,閃爍的草圖應(yīng)上載到UNO,并且LED應(yīng)該開始閃爍。您所做的全部工作將刪除UNO,并使用ISP安裝眨眼草圖。 UNO不再具有引導(dǎo)加載程序。
要將引導(dǎo)加載程序放回UNO并恢復(fù)到正常運(yùn)行,請轉(zhuǎn)到“工具,刻錄引導(dǎo)加載程序”菜單。
Windows用戶需要包括一個額外的一次性步驟。為Leonardo創(chuàng)建一個作為ISP的自定義programs.txt條目,以便您可以指定arduino協(xié)議而不是stk500v1協(xié)議。 PeterVH在此處討論了此細(xì)節(jié):https://petervanhoyweghen.wordpress.com/2012/09/16/arduinoisp-on-the-leonardo/
步驟6: ISP
我的希望是在閱讀了有關(guān)ISP流程的這些詳細(xì)信息以及引腳的詳細(xì)說明以及如何連接Arduino之后,您將獲得足夠的信息以適應(yīng)ISP流程。這個Instructable并不是要遵循的食譜,盲目地鉤住別針,并希望獲得最好的結(jié)果。現(xiàn)在,您可以弄清楚如何將任何Arduino連接到任何其他Arduino,以及刻錄新的Bootloader或上傳草圖。我希望我的解釋方法能夠成功并讓您滿意。
您能找出如何刻錄引導(dǎo)程序或使用ISP將草圖上傳到Pro Micro的方法嗎?Pro Micro是與Leonardo一樣的基于ATmega32U4的Arduino嗎?它沒有ICSP頭,但是確實(shí)有分別標(biāo)記為14、15和16的引腳。
如何使用UNO作為ISP程序員來燒寫引導(dǎo)程序或?qū)⒉輬D上傳到Nano或Pro Mini,就像UNO一樣,它們都基于ATmega328P? Nano具有ICSP接頭,但是如果接頭上沒有焊接引腳,可以改用11、12和13引腳進(jìn)行適配嗎?
使用Mega2560作為ISP程序員或目標(biāo)如何? Mega板基于ATmega2560處理器。 ISCP標(biāo)頭的排列方式如下:
50 MISO 。 . VCC
52 SCK 。 . MOSI 51
RST 。 . GND
如果在使用Mega2560作為編程器時使用修改后的ArdinoISP草圖,則可以將引腳10用作RESET發(fā)送引腳。連接到目標(biāo)Arduino的RST引腳。如果使用未經(jīng)修改的ArduinoISP草圖,則需要知道Mega2560上的SS是53針。詳細(xì)信息在ArduinoISP草圖中的注釋中。 arduino.cc的Arduino IDE 1.6.6或更早版本隨附的ArduinoISP草圖已將RESET-send引腳設(shè)置為10。有關(guān)版本1.6.5和更早版本的詳細(xì)信息,請參見步驟3。
第7步:其他協(xié)議CDC串行
還記得我說過兩種將軟件上傳到Arduino的方法嗎?好吧,我可能有點(diǎn)顫抖了。這是第三。某些Arduino模型(例如Leonardo,Pro Micro,Micro,Robot,Esplora)具有ATmega32U4處理器。它具有用于USB協(xié)議的引腳,并具有專為與USB接口而設(shè)計(jì)的低級邏輯。這意味著根本沒有USB到串行適配器或芯片,并且ATmega32U4直接連接到計(jì)算機(jī)的USB。
信息使用模擬或代表TTL串行的協(xié)議在計(jì)算機(jī)和Arduino之間傳遞,,但是沒有涉及RX和TX的裸露引腳。引導(dǎo)加載程序或上載過程完全不涉及Leonardo和其他基于ATmega32U4的Arduino上的RX和TX引腳。 USB連接是一種固件實(shí)現(xiàn)的UART0,可在草圖中使用諸如Serial.print之類的語句。 RX和TX引腳連接到輔助UART(即UART1),并在您的草圖中用于諸如Serial1.print之類的語句。
由于USB CDC串行接口沒有物理引腳,例如RX和TX以及其他相關(guān)的TTL-232引腳,我們無權(quán)使用DTR引腳來重置Arduino并使其運(yùn)行自舉程序。 USB引腳只是D +和D-。我們該怎么辦?萊昂納多的設(shè)計(jì)師對此進(jìn)行了漫長而艱苦的思考,并提出了一個有趣的解決方法。盡管ATmega32U4處理器中的CDC串行接口并沒有像串行線那樣真正使用波特率,但是它可以知道計(jì)算機(jī)何時請求設(shè)置特定的波特率。他們對Arduino IDE進(jìn)行了編程,僅將波特率更改為1200秒鐘,然后將其更改為57600。這稱為1200bps_touch,如果您研究屬于Arduino IDE的boards.txt文件,則可以看到設(shè)置。軟件包。 Leonardo檢測到此情況,并使用看門狗方法重置處理器。然后,引導(dǎo)程序?qū)⑦\(yùn)行。該引導(dǎo)程序稱為Caterina。它與基于ATmega328P的Arduino的不同之處在于,它不接受使用RX和TX線的草圖。 Caterina使用USB D +和D-線。
因此,當(dāng)您打開串行監(jiān)視器或使用它們啟動一些其他串行過程時,萊昂納多和其他基于ATmega32U4的Arduino不會重置。僅當(dāng)IDE在上傳草圖之前執(zhí)行1200bps_touch時,它們才會重置。這就是為什么當(dāng)您將其用作編程器時不需要禁用電容器自動復(fù)位的原因。
步驟8:UNO和Mega2560
好的,因?yàn)槲乙郧坝羞^輕描淡寫的經(jīng)歷,所以我會整理一下,再描述另一個。如果UNO和Mega2560是正版或克隆的,則將ATmega16U2處理器用于USB到串行芯片。這只是為了在計(jì)算機(jī)和主處理器之間進(jìn)行草圖上傳和其他串行通信。這就是ATmega16U2上的常規(guī)固件。 UNO上的主處理器是ATmega328,Mega2560上的主處理器是ATmega2560。主處理器是草圖運(yùn)行的地方。
讓我們稍微備份一下,再談一些用作USB到串行芯片的ATmega16U2處理器。它與用作Leonardo主處理器的ATmega32U4非常相似。高級用戶可以對其進(jìn)行編程,以執(zhí)行Leonardo可以做的有趣的事情,例如在連接的計(jì)算機(jī)上移動鼠標(biāo)光標(biāo),或模擬鍵盤并在連接的計(jì)算機(jī)上鍵入內(nèi)容。關(guān)鍵是,它是可編程的。
ATmega16U2具有引導(dǎo)加載程序。該引導(dǎo)加載程序不能直接從Arduino IDE進(jìn)行編程,因此為了使此ATmega16U2發(fā)揮作用而進(jìn)行黑客攻擊的人們可以使用命令行,或向IDE添加自定義項(xiàng),或使用名為FLIP的程序。引導(dǎo)加載程序協(xié)議稱為DFU,它是ATMEL為該芯片提供的默認(rèn)引導(dǎo)加載程序。您可以使用稱為FLIP的Windows程序或名為dfu-programmer的Mac/Linux程序?qū)⑵渖蟼鞯皆撐募?/p>
或者,您可以使用ISP編程將其上載到它,這將擦除芯片并安裝您的程序或替換的引導(dǎo)程序。您可能已經(jīng)注意到UNO和Mega2560上USB連接器旁邊的另一個ICSP接頭連接器。我介紹了ISP對ATmega16U2進(jìn)行編程的概念,以將ATmega16U2的庫存固件還原到另一個Instructable中。
步驟9:其他雜項(xiàng)
前面提到過,引導(dǎo)加載程序位于閃存高端范圍的一小部分。 Flash存儲器的引導(dǎo)加載程序部分設(shè)置在稱為熔絲的特殊寄存器中,該寄存器告訴處理器引導(dǎo)加載程序有多大,以及在啟動或復(fù)位時可以找到引導(dǎo)加載程序的位置。引導(dǎo)加載程序接收到草圖后,它將存儲到閃存的下部。您已加載到閃存中的草圖通常不能更改自身或引導(dǎo)加載程序,也不能寫入閃存中未使用的部分。只有在保留的引導(dǎo)加載程序區(qū)域中運(yùn)行的程序才能寫入閃存。高級用戶可以將一小段代碼放入內(nèi)存的引導(dǎo)加載程序區(qū)域中,并與引導(dǎo)加載程序共存,并在其中運(yùn)行,然后從運(yùn)行在閃存下部的程序中調(diào)用該代碼,從而使他們的程序可以寫入閃存。
由于真正或克隆的UNO和Mega 2560帶有可編程的USB串行處理器,因此可以將程序上載到該處理器以充當(dāng)ISP編程器并進(jìn)行連接。到UNO或Mega的主處理器,然后重新刻錄引導(dǎo)程序或通過ISP加載草圖。或者,您可以將草圖上傳到主處理器,該主處理器通過ISP重新編程USB到串行處理器。有時稱為UNO自助ISP。
您還可以使用FTDI USB串行轉(zhuǎn)換器作為ISP編程器,使用計(jì)算機(jī)上的程序?qū)SP協(xié)議與FTDI轉(zhuǎn)換器的針腳進(jìn)行對接。
這些備用ISP方法大多是學(xué)術(shù)上的追求,因?yàn)槭褂肐SP編程器設(shè)備或?qū)⒘硪粋€Arduino用作ISP編程器更加容易且便宜。他們是怎么做到的?
責(zé)任編輯:wv
-
Arduino
+關(guān)注
關(guān)注
188文章
6489瀏覽量
190031
發(fā)布評論請先 登錄
是否可以通過3014將數(shù)據(jù)從pc傳輸?shù)紽PGA?
開源項(xiàng)目!基于 Arduino 的 MIDI 架子鼓
基于Arduino的串口通信項(xiàng)目
怎么把電表監(jiān)測到的數(shù)據(jù)上傳平臺?

請問各位3256EVM-U通過麥克風(fēng)采集到的數(shù)據(jù)能上傳到電腦嗎?
求助,如何將定制的2級引導(dǎo)加載程序上傳到指定的2級引導(dǎo)區(qū)?
比較分析兩種不同的可提高柵極驅(qū)動電流的方法

評論