Forum: Mikrocontroller und Digitale Elektronik Attiny1614 UPDI


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Program (Gast)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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.

von Tester (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Dieter R. (drei)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Tester (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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).

von Dieter R. (drei)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Georg M. (g_m)


Bewertung
0 lesenswert
nicht lesenswert
> 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?

von Tester (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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.

von Tester (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Tester schrieb:
> 443

472, war beim Datenblatt vom 1604

von Dieter R. (drei)


Bewertung
1 lesenswert
nicht lesenswert
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.

von Tester (Gast)


Bewertung
0 lesenswert
nicht lesenswert
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?

von Dieter R. (drei)


Bewertung
0 lesenswert
nicht lesenswert
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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.