Hallo,
ich wollte gerade mal UPDI mit einem Attiny1614 testen. Dazu habe ich
mir MPLab installiert, den MPLAB PICKIT4 gekauft und GND (PIN 14) VDD
(PIN 1) und UPDI (PIN 10) verbunden.
Auf dem PICKIT4 ist
2 = VDD
3 = GND
4 = UPDI
Zur Orientierung ist ein Pfeil auf PIN 1 auf dem PICKIT4. Soweit müsste
es passen..
Nun habe ich in MPLAB ein Projekt mit dem Attiny1614 und eine main.c
angelegt.(Anhang)
Wenn ich nun versuche die Fuse zu laden, erhalte ich eine Fehlermeldung:
1
Connecting to MPLAB PICkit 4...
2
3
Currently loaded versions:
4
Application version............1.8.146
5
Tool pack version .............1.0.61
6
Target voltage detected
7
8
The following memory area(s) will be read:
9
configuration memory
10
11
PDI physical timed out. (25)
12
UPDI pin might be configured to other functionality. Try using UPDI High Voltage Activation, configured in the tool's "Communication" property page.
13
14
Read did not complete.
UPDI mit high voltage habe ich wie vorgeschlagen eingestellt. (Zu finden
unter File -> Project Properties -> PICKIT4 -> Communication -> High
Voltage Activation Mode: Simples High Voltage Pulse
Das Fuse laden als auch Programmieren funktioniert leider weiterhin
nicht. Fehlt bei der Beschaltung etwas?
Vor dem Fuse laden hab ich versucht den MCU zu flashen. Kann es sein,
dass dabei irgendwelche Fuse gesetzt worden sind? Ich habe nicht in
Erinnerung, dass irgendwas korrekt lief...
Freue mich über Hinweise und Hilfestellungen.
Hast du ein serial-USB converter?
Du könntest dann mal mit https://github.com/mraardvark/pyupdi/ versuchen
die Fuse auszulesen, dann bist du dir sicher dass dein MCU funktioniert
und richtig angeschlossen ist - und die Fehlerquelle somit irgendwo
zwischen Programmer und PC liegen muss.
Program schrieb:> UPDI mit high voltage habe ich wie vorgeschlagen eingestellt. (Zu finden> unter File -> Project Properties -> PICKIT4 -> Communication -> High> Voltage Activation Mode: Simples High Voltage Pulse
Meines Wissens funktioniert High Voltage Programming mit PICKIT4
weiterhin nicht. Es gibt in diversen Foren diverse Diskussionen dazu,
auch hier. Mir bekannter Status ist, dass es nur mit dem Atmel Power
Programmer geht. PICKIT4 und Atmel ICE bieten zwar die Funktion, aber
sie ist tatsächlich nicht implementiert.
Diese Information ist nun schon etliche Monate alt, ich vermute aber, es
hat sich nie etwas geändert. Um es genau zu wissen, müsstest du
Microchips Support kontaktieren.
Falls du also die entscheidende Fuse falsch gesetzt hast, bist du
vermutlich chancenlos und kontrollieren kannst du es auch nicht mehr.
Dieter R. schrieb:> Meines Wissens funktioniert High Voltage Programming mit PICKIT4> weiterhin nicht. Es gibt in diversen Foren diverse Diskussionen dazu,> auch hier. Mir bekannter Status ist, dass es nur mit dem Atmel Power> Programmer geht. PICKIT4 und Atmel ICE bieten zwar die Funktion, aber> sie ist tatsächlich nicht implementiert.
Man kann das ganz einfach "simulieren", indem am UPDI Pin einfach für
eine kurze Zeit 12V angelegt wird (z.B. von einem Labornetzteil).
Tester schrieb:> Man kann das ganz einfach "simulieren", indem am UPDI Pin einfach für> eine kurze Zeit 12V angelegt wird (z.B. von einem Labornetzteil).
Kann man, wenn es gelingt, das Timing einzuhalten. Daran sind allerdings
bisher und in der Regel einschlägige Versuche gescheitert. Lt.
Datenblatt hat man 4 ms Zeit für den Impuls und 14 ms danach muss die
Kommunikation beginnen.
> UPDI pin might be configured to other functionality.
Also, von allein kann das nicht passieren.
Program schrieb:> UPDI mit high voltage habe ich wie vorgeschlagen eingestellt. (Zu finden> unter File -> Project Properties -> PICKIT4 -> Communication -> High> Voltage Activation Mode: Simples High Voltage Pulse
Und? Kommt danach keine UPDI-Fehlermeldung mehr?
Dieter R. schrieb:> Kann man, wenn es gelingt, das Timing einzuhalten. Daran sind allerdings> bisher und in der Regel einschlägige Versuche gescheitert. Lt.> Datenblatt hat man 4 ms Zeit für den Impuls und 14 ms danach muss die> Kommunikation beginnen.
Jein, der MCU bleibt in der UPDI configuration bis zu einen
Power-On-Reset, d.h. man hat Zeit vom 12V zum UPDI programmer zu
wechseln (siehe Seite 443 im Datenblatt). Hat bei mir so auch schon an
einem attiny412 funktioniert.
Anmerkung, um das Risiko falsch gesetzter Fuses zu verringern, habe ich
mir angewöhnt, sie in der Source zu definieren, also z. B.:
FUSES =
{
.WDTCFG = 0x00,
.BODCFG = ACTIVE_ENABLED_gc | SLEEP_ENABLED_gc | LVL_BODLEVEL3_gc, //
2.9 V
.OSCCFG = FREQSEL_20MHZ_gc,
.TCD0CFG = 0x00,
.SYSCFG0 = CRCSRC_NOCRC_gc | RSTPINCFG_UPDI_gc, // UPDI
.SYSCFG1 = SUT_64MS_gc,
.APPEND = 0x00,
.BOOTEND = 0x00,
};
Wichtig ist, dass alle Fuses definiert werden, auch nicht benutzte.
Dieter R. schrieb:> Anmerkung, um das Risiko falsch gesetzter Fuses zu verringern, habe ich> mir angewöhnt, sie in der Source zu definieren, also z. B.:
Wo landen die dann nach dem kompilieren? Liest der Programmer die aus
und setzt sie selber, oder werden sie vom MCU beim booten gesetzt?
Tester schrieb:> Dieter R. schrieb:>> Anmerkung, um das Risiko falsch gesetzter Fuses zu verringern, habe ich>> mir angewöhnt, sie in der Source zu definieren, also z. B.:>> Wo landen die dann nach dem kompilieren? Liest der Programmer die aus> und setzt sie selber, oder werden sie vom MCU beim booten gesetzt?
Im .elf-File und dann werden sie vom Programmer gesetzt. Funktioniert
zumindest mit Atmel Studio so.