2015年10月31日 星期六

[序章] USBasp 的韌體安裝:韌體更新遭遇戰


在初步完成插件之後,緊接著想到的是應該要試著讓電腦系統可以辨識到這個裝置,這個動作就包含了兩個最主要的動作:上傳韌體到 MCU以及驅動程式的安裝
人生的 but, 總是這樣子開始的 (咖啡 ~

應該沒有辦法在這上面寫過多、也太過詳細的撞牆設定與測試 ‧‧‧
因為之前就已經在其它實驗上,拿過本回合要改成 USBasp 的這顆 Atmega328p,所以這顆 MCU 裡頭也早已經透過 Arduino IDE 安裝了它所提供的 bootloader 了。
這個地方或許就已經埋下了很重要的關問題點,也是之後需要驗證的


以正常的狀況下來說,就只要跟著根目錄所提供的那個 readme.txt 上面的講解,再根據自己的需求進行設定和步驟的調整就行了。
一般的狀況流程 :
  1. 修改 makefile 或是 config.h 這一類的檔案.
  2. make clean
  3. make
  4. make install / make upload / make xxxx 這一類的指令
然後安裝韌體的這階段就可以收工了。
不過,問題會發生,不就就是這麼回事嘛! =.=
由於,很重要的魷魚 ~
打開 firmware/Makefile 在一開頭就寫了個重點項目: TARGET
也就是說,這個韌體可能是拿來搭配這幾顆 MCU 的。
# TARGET=atmega8    HFUSE=0xc9  LFUSE=0xef
# TARGET=atmega48   HFUSE=0xdd  LFUSE=0xff
# TARGET=at90s2313

HFUSE 和 LFUSE 分別表示,要針對這些 MCU 裡頭的 High Fuse byte & Low Fuse byte 開關設定哪一些旗標值。


※ 基金/股票買賣,投資理財,有賺有賠有風險,下手前請詳細參閱公開說明書 ~
在此附上官方文件 Atmel ATmega48A/PA/88A/PA/168A/PA/328/P Datasheet 連結;不多 ‧‧‧ 目前版本 六百五十頁而已 ~‧ ~
我很難一開頭就說:我先看完這顆晶片的規格書,然後再來開始玩 吧~ 吧~ 吧~ 吧~
所以,手頭上的這幾顆 Atmega328p 基本上,都不是在此文件提及的晶片規格當中,如果能夠順利的裝上去,還能運作,基本上就是 運氣太好
手邊也沒其它型號可以拿來試的了啊,也只能先試看看再做打算了 ~

經歷了一堆波折後,終於得到了個稍微正常一點點,可以讓 MCP 去吃這一個韌體的指令:
avrdude -v -c arduino -p atmega328p -P COM5 -U flash:w:./main.hex:a
D:\>avrdude -v -c arduino -p atmega328p -P COM5 -U flash:w:./main.hex:a
avrdude: Version 5.10, compiled on Jan 19 2010 at 10:45:23
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
         Copyright (c) 2007-2009 Joerg Wunsch
         System wide configuration file is "C:\WinAVR\bin\avrdude.conf"
         Using Port                    : COM5
         Using Programmer              : arduino
         AVR Part                      : ATMEGA328P
         Chip Erase delay              : 9000 us
         PAGEL                         : PD7
         BS2                           : PC2
         RESET disposition             : dedicated
         RETRY pulse                   : SCK
         serial program mode           : yes
         parallel program mode         : yes
         Timeout                       : 200
         StabDelay                     : 100
         CmdexeDelay                   : 25
         SyncLoops                     : 32
         ByteDelay                     : 0
         PollIndex                     : 3
         PollValue                     : 0x53
         Memory Detail                 :
                                  Block Poll               Page                       Polled
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
           eeprom        65     5     4    0 no       1024    4      0  3600  3600 0xff 0xff
           flash         65     6   128    0 yes     32768  128    256  4500  4500 0xff 0xff
           lfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           hfuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           efuse          0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           lock           0     0     0    0 no          1    0      0  4500  4500 0x00 0x00
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
         Programmer Type : Arduino
         Description     : Arduino
         Hardware Version: 3
         Firmware Version: 4.4
         Vtarget         : 0.3 V
         Varef           : 0.3 V
         Oscillator      : 28.800 kHz
         SCK period      : 3.3 us
avrdude: AVR device initialized and ready to accept instructions
Reading | ################################################## | 100% 0.00s
avrdude: Device signature = 0x1e950f
avrdude: safemode: lfuse reads as 0
avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: NOTE: FLASH memory has been specified, an erase cycle will be performed
         To disable this feature, specify the -D option.
avrdude: erasing chip
avrdude: reading input file "./main.hex"
avrdude: input file ./main.hex auto detected as Intel Hex
avrdude: writing flash (4852 bytes):
Writing | ################################################## | 100% 0.88s
avrdude: 4852 bytes of flash written
avrdude: verifying flash memory against ./main.hex:
avrdude: load data flash data from input file ./main.hex:
avrdude: input file ./main.hex auto detected as Intel Hex
avrdude: input file ./main.hex contains 4852 bytes
avrdude: reading on-chip flash data:
Reading | ################################################## | 100% 0.73s
avrdude: verifying ...
avrdude: 4852 bytes of flash verified
avrdude: safemode: lfuse reads as 0
avrdude: safemode: hfuse reads as 0
avrdude: safemode: efuse reads as 0
avrdude: safemode: Fuses OK
avrdude done.  Thank you.
看到最後的這幾行訊息,感覺好像是失敗的,不過看起來又好像是成功的狀況,就先當做這個動作是完成的好了。
然後就進入另一回合的遭遇戰了 ~
PS:遲遲不想在旗標值的部份有所動作,主要也是因為對 AVR 還有這些設定值不熟,而且不想要隨隨便便就把 MCU 搞成樂高積木 ~

#Arduino, #USBasp, #AVR

沒有留言:

張貼留言