Hallo allerseits, habe nach längerer Zeit wieder mit C Programmieren angefangen und mich gleichzeitig für einen XMega entschieden. Meine bisherigen Erfahrungen beschränken sich auf die mega Serie. Nun habe ich auch schon das erste Problem (zumindest das erste über das ich schreibe ;) ), ich möchte für meine Anwendung ein Array welches im Flash angesiedelt ist und 7200byte groß ist auf einem port ausgeben, das sollte mit pgm_read_byte kein problem sein. Jetzt kommts aber, das Array soll über USART zu ändern gehen, also alle 7200 byte über die serielle Schnittstelle empfangen und nach eventueller Checksummen Prüfung in den Flash Speicher schreiben. Geht das aus der Anwendung? Gibt es eine Alternative? Mir ist schon eingefallen den Bootloader code zu erweitern denn der macht ja prinzipiell genau das was ich will, jedoch müsste ich dann meine Kommunikation umbauen (ich verwende ein Matlab Frontend) da die ja dannn lernen müsste mit dem BL zu kommunizieren. Bin für Vorschläge und Codeschnipsel dankbar. mfg. Robert
Gast
#3775433
Xmega Flash beschreiben geht grundsätzlich nur mit Code in der Boot-Section.
Mit entsprechender API im BLS geht sowas schon. Man muss aber ein paar Dinge beachten, sonst crasht der AVR. http://matrixstorm.com/avr/avrstick/#msdbootloader_api MfG
Habe mir die Seite matrixstorm einmal angesehen. Ich verwende jedoch einen 128A1 ohne USB, müsste also den Bootloader reverse-engineeren und die relevanten Stellen auf einen "normalen" Bootloader umschreiben damit ich die API verwenden kann, das ist jedoch außerhalb meiner Möglichkeiten.
Hallo. API ist nur eine Flashseite, mehr oder weniger unabhaengig vom Bootloader. Hab das ganze sogar ins FLIP reingepatch, ohne FLIP jemals neu zu compilen. Ich haenge dir mal die API Seite an. Bei Fragen helfe ich gern. MfG
Ich denke ich bekomme eine Ahnung wie das funkt.
In der letzten flash page in der BL Section steht deine API page
(compilierte __bootloader__**** files) Am Beginn der API Page ist eine
Sprungtabelle die unter anderem do_spm (Offset 2) anspringt.
In der Applikation wird wird apipage.h inkludiert, dort wird mit extern
definierten funktionen auf die Sprungtabelle verwiesen.
(#define APIPAGE__bootloader__do_spm (APIPAGE_PAGEBYTEADDRESS+0x08))
Es wird also gar kein code aus dem BL verwendet, somit patcht man die
apipage anstelle der letzten flash page in den Bootloader.
Einiges ist jedoch noch unklar:
.) APIPAGEAUXSECTION ist nirgendwo definiert oder ist das nicht
notwendig?
.) section (".apipage") müsste im Makefile def. sein. Kannst Du mir das
auch zeigen?
.) was ist apipage.a?
.) Kannst Du mir die compilierte APIPage schicken damit ich den BL
patchen kann? Ich plane avr-xboot (https://code.google.com/p/avr-xboot/)
zu verwenden.
Danke für die Hilfe.
mfg. Robert
Hallo Robert Offner schrieb: > APIPAGEAUXSECTION ist nirgendwo definiert oder ist das nicht > notwendig? Das ist ein Makro welches von meinem internen AUXSECTION System definiert wird. Du kannst es aber auch leer lassen, dann lander der entpsrechende Code eben in .text. Der Grund fuer diese allgmeinere Programmierung: Manchmal passt (bei der Bootloaderprogrammierung) nicht alles in die BLS. Das AUXSECTION Level entscheidet dann per Makro, was statt in .text/.boot in einer Pseudo-BLS landet. Robert Offner schrieb: > section (".apipage") müsste im Makefile def. sein. Kannst Du mir das > auch zeigen? Das wird einfach als Linkeranweisung an den Anfang der letzten Seite des Flash positioniert. "-Wl,--section-start=.apipage=0x21e00" (im Falle von ATxmega128A3U) Robert Offner schrieb: > Kannst Du mir die compilierte APIPage schicken damit ich den BL > patchen kann? Ich plane avr-xboot (https://code.google.com/p/avr-xboot/) > zu verwenden. Kann ich machen - aber schwatzen wir mal bei Tageslicht dueber. Bin schon ziemlich KO jetzt um diese Zeit. Fuer meine http://www.ebay.de/itm/231298084713?ssPageName=STRK:MESELX:IT&_trksid=p3984.m1555.l2649 habe ich aber auch einen Bootloader nach AVR1605 direkt mit APIPage vorhanden. (Ist das nicht sogar die Refernezimplementierung von XBoot?) Robert Offner schrieb: > was ist apipage.a? Eine vorkompilierte Bibliothek fuers statische Linken (eingentlich object archive), welches das minimale __do_spm auf bequemere Funktionen umsetzt - siehe apipage.h . Beispielsweise musst du nur noch "flash_writepage" aufrufen, waehrend ansonsten das alles gemacht werden muesste:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
86 | |
87 | |
88 | |
89 | |
90 | |
91 | |
92 | |
93 | |
94 | |
95 | |
96 | |
97 | |
98 | |
99 | |
100 | |
101 | |
102 | |
103 | |
104 | |
105 | |
106 | |
107 | |
108 | |
109 | |
110 | |
111 | |
112 | |
113 | |
114 | |
115 | |
116 | |
117 | |
118 | |
119 | |
120 | |
121 | |
122 | |
123 | |
124 | |
125 | |
126 | |
127 | |
128 | |
129 | |
130 | |
131 | |
132 | |
Bis nachher/morgen. MfG Stephan p.s.: Nur zur Erwaehnung die ganzen Codeauszuege sind Bestandteil meines AVR Stick Projektes: http://matrixstorm.com/avr/avrstick/
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.