AVR熔絲位設(shè)置讓我在吃苦頭中成長
UNO是arduino一個開源的產(chǎn)品,基本上驅(qū)動程序,bootload等都可以在其官方上找到,不過說句實在的,因為一直沒有成功寫進(jìn)atmega8u2-mc這款控制器里面,一直在懷疑著自己找到的是不是正確的bootload的。就這樣子弄了兩個星期無果,自己郁悶,公司估計也很郁悶。中間斷斷續(xù)續(xù)地焊了幾塊板,幾乎把打樣的板子都快用光了,剛開始懷疑是atmega8u2-mc焊接有問題,畢竟公司也是第一次焊QFN的封裝,而且兩個焊盤間距小得我在默認(rèn)PCB畫圖的時候軟件老會報錯。在兩個星期后終于開始把問題弄了個明朗。
在逛arduino官網(wǎng)的時候,一直沒有找到關(guān)于USB轉(zhuǎn)串口的模塊,也就是atmega8u2-mu是怎么下載程序的,之前在提議下公司買了一個專用的下載器,在經(jīng)過無數(shù)次下載程序后發(fā)現(xiàn)燒寫得進(jìn)去,但是好像還是行不通的。一直以來沒有對UNO里面ISP下載有所想法,一直認(rèn)為是給主控制部分mega328/168留著的兩個ISP下載串口,實際上只能說自己太粗心了。
直到突然在看我畫的PCB板的時候恍然大悟,怎么旁邊那個ISP接口是跟ATMEGA8U2連在一起的呢?另外,看了一下數(shù)據(jù)手冊,所接的串口還真的是ATMEGA8U2的ISP。
就是少了這個發(fā)現(xiàn)的情況下,讓自己吃了不少夸呀。實踐證明這里才是ATMEG8U2的下載口。
當(dāng)時那個心情真的是無法形容,趕緊來了一個USBASP下載器(這個下載器是我自己的,當(dāng)做為公司做貢獻(xiàn)了),標(biāo)準(zhǔn)板本基本上是10個接口的,但是ATMEGA8U2是6個引腳的,不過這個對于我倒是好辦,在avr單片機(jī)論壇http://www.51hei.com/bbs/mcu-avr-1.html查了相關(guān)資料,把10口的引腳做成了6個引腳就搞定了。懷著忐忑的心情下載了程序,居然很順利的下載到里面去了,下載界面顯示:
本文引用地址:http://m.butianyuan.cn/article/201611/323775.htm把UNO插進(jìn)電腦,居然提示發(fā)現(xiàn)新硬件,并自動彈出一個安裝驅(qū)動程序的下載框,心里那個高興無法言表,打開IDE也發(fā)現(xiàn)了com口了。按照我的慣性思維:有發(fā)現(xiàn)com口是可以正常下載程序了,接著是下載程序了,可是無奈的事是下載程序的時候提示
看來是下載程序還有問題,這個問題看了下官網(wǎng),按著解決辦法弄了一個上午又沒有什么進(jìn)展。真是無語了,表示很蛋疼。
后來根據(jù)硬件在下載程序的時候燈的顯示結(jié)果,電腦發(fā)送燈會亮,單片機(jī)接收燈也沒有問題,問題是它們和接收有點不同步的感覺,我想有可能數(shù)據(jù)在那個地方丟失了,再看了一些AVR單片機(jī)的資料,哎,這次終于知道是為什么了,原來是我設(shè)置熔絲位的時候沒有設(shè)置好,這就是對AVR單片機(jī)沒有深入了解的結(jié)果。記得之前學(xué)習(xí)PIC的時候,在開頭總會寫上__CONFIG(0x313b);而AVR則不同。在經(jīng)過一天的研究中,把公司的幾個MEGA8U2熔絲位給弄壞了,終于在第五個的時候下載成功,IDE也發(fā)現(xiàn)在了COM口,下載程序給MEGA328的時候也順利了,搞了半個多月的UNO終于算是完美地畫了一個句號。下面把我這些天的學(xué)習(xí),個人對AVR的設(shè)置的看法拿出來跟大家分享一下吧,也許對大家研究和學(xué)習(xí)AVR會有幫助。
我用的是USBASP下載器,用的軟件是網(wǎng)上隨便都能夠下載得到的progisp。
1.它在編程的時候為0,未編程的時候為1(這里跟我們平時編程可能有點相反,我吃過這夸了,燒壞了兩個芯片以后發(fā)現(xiàn)了這個問題,其實網(wǎng)上也有很多這方面資料,要是自己能夠早點看到別人寫的文章給說明一下就好了。自己可以給公司省幾塊還算值錢的IC呢)。
加密位設(shè)置:LB2,LB1為1,0或者0,0時,不能通過任何方式讀取芯片內(nèi)部的flash和eeprom數(shù)據(jù)。但是熔絲位的狀態(tài)仍然可以讀取,只是不是能修改。因為UNO可以確定bootload程序沒有問題,而且考慮到用戶買我們產(chǎn)品的時候會不小心修改掉bootload。所以我這里設(shè)置為了0,0.這個對一些技術(shù)比較厲害的高手對于程序的保護(hù)可能會有很大幫助。這也就是我在上一篇文章中提到的AVR的保密性比PIC高的原因。
WTDON為看門狗設(shè)置,1表示要用軟件控制WTD(看門狗)才打開,0表示不用軟件控制WTD一直打開,用戶只能利用軟件控制WTD的溢出時間。因為我們平時基本上都是不會讓W(xué)TD一直工作的,所以我在UNO里選1,建議大家設(shè)置的時候也選一,要用的時候我們用軟件控制就行了。呵呵。用軟件控制感覺也不是很麻煩。
SPIEN,這個設(shè)置是關(guān)鍵,1表示禁止編程,之前我設(shè)置成1,下載程序的時候一直顯示模式不對,選0下載成功。原因在于我用的下載方式是SPI下載的。所以這里要打開才行。
bootrst表示上電后從0x00執(zhí)行還是bootload區(qū)執(zhí)行,我設(shè)置的時候是0.表示從0x00開始執(zhí)行,AVR單片機(jī)工作那么快,呵呵,多讓它工作點沒事,也不礙時間。所以我設(shè)置了0x00。實際上在UNO這里設(shè)置為1也是可以的。
6.系統(tǒng)時鐘源的設(shè)置:1111-1010表示外接晶振,其它比如內(nèi)部晶振,RC振蕩我就不寫啦,大家感興趣的可以Q我,大家一起學(xué)習(xí)或者查一查資料。
CKOPT,CKSEL3 KSEL2,KSEL1,KSEL0.設(shè)置的是起振時電容的容量,因為我用的是外部晶振,22pF的方式提供時鐘源,所以設(shè)置為:1,1,1,1.之前沒有設(shè)置,所以導(dǎo)致了單片機(jī)不知道用那個作為時鐘源,導(dǎo)致時鐘混亂,所以也就是我看到的程序傳輸時接收和發(fā)送燈的閃亮問題。經(jīng)過驗證原因出在這里。
大概就這么多吧,當(dāng)然要設(shè)置的還有其它,呵呵。時間比較有限,所以只是把我用到的進(jìn)行了研究,其它一些位就等待以后再研究了。
評論