Forum: Mikrocontroller und Digitale Elektronik Crumb644 von Chip45 mit Firmware flashen


von Jenar G. (toxsin)


Lesenswert?

Hallo zusammen,

ich versuche mich gerade in die Welt der Elektronik und Mikrocontroller 
einzufinden mit Hilfe der Einstiegshilfe von Stefan Frings. 
http://stefanfrings.de/mikrocontroller_buch/index.html

Gleichzeitig mache ich eine großen Schritt vorraus und würde sehr gern 
das Alarmanlagenprojekt
http://stefanfrings.de/bfAlarm/index.html
versuchen umzusetzen. Damit ich nicht immer den Autor der Software (der 
mir bereits sehr geduldig und kompetent geholfen hat , vielen vielen 
dank!) per eMail belästige, hoffe ich auf Hilfe hier im Forum 
(hoffentlich im richtigen Bereich).

Zuerst habe ich mir bei Chip45.com den Crumb644 mit installierten 
Bootloader und 20Mhz gekauft. http://go.chip45.com/crumb644-1.1

Folgende Schritte habe ich danach gemacht:

1. Die Stiftleisten und den 20Mhz Quartz angelötet

2. Ein ausrangiertes FujitsuSiemens 5V 1A Netzteil für 
Versorgungsspannung organisiert und die +5V mit VCC und Ground mit GND 
des Crumb644 auf einem Experimentierboard verbunden.

3. Treiber installiert 
http://www.silabs.com/Support%20Documents/Software/CP210x_VCP_Windows.zip

4. BootloaderGUI von Chip45 installiert 
http://www.chip45.com/avr_bootloader_atmega_xmega_chip45boot2.php

5. Netzteil des Crumb644 eingesteckt und via USB mit dem Rechner 
verbunden

---> PC installiert die Treiber selbständig und der Crumb644 wird auf 
COM5 erkannt.

6. Chip45 BootloaderGUI gestartet und beim drücken des Buttons "connect 
to Bootloader" verbindet sich das Programm mit dem Bootloader des 
Crumb644 auf COM5 mit 115200 Baudrate.

Da die vorcompilierte Firmware von Stefan Frings 
http://stefanfrings.de/avr_io/SERIAL-IO-Modul_v1.4.1.zip nur für 14,7MHz 
Taktgeber vorhanden war und ich 20Mhz brauche, habe ich folgendes 
gemacht:

7. WinAVR installiert und mit dem Programmers Notepad das Makefile aus 
der Firmware geöffnet (im Ordner scr)

8. In der Zeile F_CPU von 14,7MHz auf 20Mhz umgestellt
1
ifeq ($(LAYOUT),Crumb644)
2
  MCU = atmega644p
3
  F_CPU = 20000000
4
  LFUSE = 0xF7
5
  HFUSE = 0xD9
6
  # See additional settings in hw-layout.h !
7
endif

9. Unter dem Programmreiter Tools die Befehle "Make Clean" & "Make all" 
in dieser Reihenfolge ausgeführt. Dadurch werden im Ordner des Makefiles 
3 Dateien erzeugt
SERIAL-IO-Modul.elf
SERIAL-IO-Modul.hex
SERIAL-IO-Modul.map

10. Öffnen der Chip45 BootloadersGUI und mit dem Bootloader des Crump644 
verbinden

11. Beim Button "Select Flash Hexfile" habe ich die neu erzeugte 
SERIAL-IO-Modul.hex ausgewählt und anschließend auf "Programm Flash" 
gedrückt.

---> Die BootloaderGUI rechnete kurz, es erschien keine Fehlermeldung 
und im Log war (sinngemäß) zu lesen das das Programm übertragen wurde.

12. Danach habe ich auf den Button "Start Application" gedrückt. Im Log 
erschien (sinngemäß) Programm gestartet.

13. Nun wollte ich das ganze Testen (siehe 
http://stefanfrings.de/bfAlarm/Installations_Anleitung.pdf S.34) und 
habe ein Terminalprogramm http://www.der-hammer.info/terminal/ mit COM5 
und 115200Baud verbunden. In der Statutszeile unten rechts, steht auch 
"Connect to COM5)

14. Der Terminalbefehl "h" soll eine Hilfeseite erscheinen lassen, doch 
leider tut sich bei mir nichts. Auch in der Java Web App "bfAlarm" tut 
sich nichts, der USB COM5 wird nicht erkannt.

Danach habe ich versucht die BootloaderGUI von Chip45 nochmals mit dem 
Bootloader des Crumb644 zu verbinden. Hatte keinen Erfolg. Habe es 
mehrfach probiert (mit Neustart, ändern des Comports im Gerätemanager). 
Die BootloaderGUI versucht sich zu verbinden aber meldet im Log das der 
Bootloader nicht gefunden wird.

Als nächstes habe ich versucht mit dem Programmers Notepad von WinAVR 
mich direkt zu verbinden. Folgende Schritte hab ich gemacht: (Crumb644 
ist auf COM5)

a) Öffnen des Makefiles der Firmware mit dem Programmers Notepad

b) Zeile AVRDUDE_HW für COM5 angepasst
1
# Programmer hardware settings for avrdude
2
# Linux:   /dev/ttyUSB0 is the first virtual serial port 
3
# Windows: //./COM20    is the virtual port COM20
4
AVRDUDE_HW = -c avr910 -P //./COM5 -b 115200 -v
5
# AVRDUDE_HW = -c avrispmkII -Pusb -v

c) überprüft ob F_CPU = 20000000
1
ifeq ($(LAYOUT),Crumb644)
2
  MCU = atmega644p
3
  F_CPU = 20000000
4
  LFUSE = 0xF7
5
  HFUSE = 0xD9
6
  # See additional settings in hw-layout.h !
7
endif

d) Unter dem Programmreiter Tools die Befehle "Make Clean" & "Make all" 
& "Programm" in dieser Reihenfolge ausgeführt.

Output von "Make Clean":
1
> "make.exe" clean
2
rm -rf *.o driver/*.o SERIAL-IO-Modul.hex SERIAL-IO-Modul.elf SERIAL-IO-Modul.lst SERIAL-IO-Modul.map SERIAL-IO-Modul_eeprom.hex
3
4
> Process Exit Code: 0
5
> Time Taken: 00:01

Output von "Make All":
1
> "make.exe" all
2
avr-gcc -std=c99 -Wall -Os -mmcu=atmega644p -DF_CPU=20000000 -DSERIAL_BITRATE=115200  -DCrumb644 -ffunction-sections -fdata-sections   -c -o driver/serialconsole.o driver/serialconsole.c
3
avr-gcc -std=c99 -Wall -Os -mmcu=atmega644p -DF_CPU=20000000 -DSERIAL_BITRATE=115200  -DCrumb644 -ffunction-sections -fdata-sections   -c -o driver/ADC.o driver/ADC.c
4
avr-gcc -std=c99 -Wall -Os -mmcu=atmega644p -DF_CPU=20000000 -DSERIAL_BITRATE=115200  -DCrumb644 -ffunction-sections -fdata-sections   -c -o io-commands.o io-commands.c
5
avr-gcc -std=c99 -Wall -Os -mmcu=atmega644p -DF_CPU=20000000 -DSERIAL_BITRATE=115200  -DCrumb644 -ffunction-sections -fdata-sections   -c -o main.o main.c
6
avr-gcc -std=c99 -Wall -Os -mmcu=atmega644p -DF_CPU=20000000 -DSERIAL_BITRATE=115200  -DCrumb644 -ffunction-sections -fdata-sections -Wl,-Map,SERIAL-IO-Modul.map -Wl,--gc-sections -o SERIAL-IO-Modul.elf driver/serialconsole.o driver/ADC.o io-commands.o main.o 
7
avr-objcopy -j .text -j .data -O ihex SERIAL-IO-Modul.elf SERIAL-IO-Modul.hex
8
9
> Process Exit Code: 0
10
> Time Taken: 00:01

Output von "Programm" (habe den Vorgang nach mehreren Minuten 
abgebrochen):
1
 > "make.exe" program
2
avrdude -p atmega644p -c avr910 -P //./COM2 -b 115200 -v -U flash:w:SERIAL-IO-Modul.hex:i
3
4
avrdude: Version 5.10, compiled on Jan 19 2010 at 10:45:23
5
         Copyright (c) 2000-2005 Brian Dean, http://www.bdmicro.com/
6
         Copyright (c) 2007-2009 Joerg Wunsch
7
8
         System wide configuration file is "C:\WinAVR-20100110\bin\avrdude.conf"
9
10
         Using Port                    : //./COM2
11
         Using Programmer              : avr910
12
         avr910_devcode (avrdude.conf) : 0x74
13
         Overriding Baud Rate          : 115200
14
         AVR Part                      : ATMEGA644P
15
         Chip Erase delay              : 9000 us
16
         PAGEL                         : PD7
17
         BS2                           : PA0
18
         RESET disposition             : dedicated
19
         RETRY pulse                   : SCK
20
         serial program mode           : yes
21
         parallel program mode         : yes
22
         Timeout                       : 200
23
         StabDelay                     : 100
24
         CmdexeDelay                   : 25
25
         SyncLoops                     : 32
26
         ByteDelay                     : 0
27
         PollIndex                     : 3
28
         PollValue                     : 0x53
29
         Memory Detail                 :
30
31
                                  Block Poll               Page                       Polled
32
           Memory Type Mode Delay Size  Indx Paged  Size   Size #Pages MinW  MaxW   ReadBack
33
           ----------- ---- ----- ----- ---- ------ ------ ---- ------ ----- ----- ---------
34
           eeprom        65    10   128    0 no       2048    8      0  9000  9000 0xff 0xff
35
           flash         33     6   256    0 yes     65536  256    256  4500  4500 0xff 0xff
36
           lock           0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
37
           lfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
38
           hfuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
39
           efuse          0     0     0    0 no          1    0      0  9000  9000 0x00 0x00
40
           signature      0     0     0    0 no          3    0      0     0     0 0x00 0x00
41
           calibration    0     0     0    0 no          1    0      0     0     0 0x00 0x00
42
43
         Programmer Type : avr910
44
         Description     : Atmel Low Cost Serial Programmer
45
46
Found programmer: Id = ""; type = ®
47
    Software Version = D.
48
49
Programmer supports the following devices:
50
    Device code: 0xffffffcf = (unknown)
51
    Device code: 0xffffffcf = (unknown)
52
    Device code: 0xffffffcf = (unknown)
53
    Device code: 0xffffffcf = (unknown)
54
    Device code: 0xffffffcf = (unknown)
55
    Device code: 0xffffffcf = (unknown)
56
    Device code: 0xffffffcf = (unknown)
57
    Device code: 0xffffffcf = (unknown)
58
    Device code: 0xffffffcf = (unknown)
59
    Device code: 0xffffffcf = (unknown)
60
    Device code: 0xffffffcf = (unknown)
61
    Device code: 0xffffffcf = (unknown)
62
63
> Forcefully terminating process...
64
65
> Process Exit Code: 1
66
> Time Taken: 03:44

Habe hier noch ein Screenshot von der Zeile "Found Programmer:", da es 
Sonderzeichen enthält die nicht via Copy&Paste übertragen werden:
https://dl.dropboxusercontent.com/u/11379697/pics/programmer.png


Nun weiß ich nicht mehr was ich machen kann damit das noch funktioniert. 
Ich hoffe ich habe den Crumb644 nicht zerflasht. Was kann ich tun?

Bitte um eure Mithilfe
Danke und grüße
toxsin

von Sascha W. (sascha-w)


Lesenswert?

Hallo,

das du nicht mehr so ohne weiteres in den Bootloader kommst, liegt 
daran, das das von dir geladene Programm läuft - auch wenn es erst mal 
nicht das mach was es soll. Der Bootloader wird nur nach einem Reset 
ausgeführt und wartet nur kurz ob über die Serielle Schnittstelle ein 
passendes Kommando kommt. Evl. solltest du mal J7 schließen, damit das 
Bootloaderprogramm den Reset im richtigen Moment selber auslösen kann.

Beim ersten Start kommst du ohne den "Kniff" in den Bootloader, da der 
Flash in dem Moment noch leer ist und der Bootloader immer wieder neu 
gestartet wird.

Die Verbindung über USB & virt. COM kannst du vom PC aus immer 
herstellen - das ist unabhängig vom Programm auf dem Controller, da das 
von dem USB2Serial Chip erledigt wird.

Sascha

von Jenar G. (toxsin)


Lesenswert?

Hallo Sascha,

danke für den Tip. Also ist der Crumb644 noch zu retten? :)

Der Reset wird also durchgeführt wenn ich den J7 schließe und eine 
Anwendung (z.B. die BootloaderGUI) auf den richtigen COM Port zugreift. 
Da würde ich das gern probieren, nur finde ich den J7 nicht.

Hier im Infosheet (S.1 unten) ist er nicht eingezeichnet
http://download.chip45.com/Crumb644_V1.1_infosheet.pdf

hier im Schaltplan steht unten links etwas vom J7
http://download.chip45.com/Crumb644_V1.1_schematics.pdf

Wo finde ich den J7 bzw. welche Pins müßte ich verbinden?

von Jenar G. (toxsin)


Lesenswert?

Hallo,

habe etwas anderes ausprobiert. Und zwar habe ich Atmel AVR Studio 
installiert und mithilfe eines USB ISP Programmers die Firmware nochmals 
geflasht. Hatte wahrscheinlich vergessen im Makefile den COM Port 
anzugeben, oder einen anderen Fehler.

Lange Rede, Kurzer Sinn... nun geht es. Die Kommunikation zw. USB und 
bfAlarm funktioniert. Ich danke Dir Sascha für die Hilfe.

Beste Grüße
toxsin

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.