Ultrasonic Level Meter Boot Loader Page in English
Ultrasonic Level Meter Boot Loader Page in English

Bootloader

Vor dem Start des Sen­sor-Pro­gramms wird ein Boot­loa­der ge­star­tet, der es er­mög­licht die Firm­ware über die RS485-Schnitt­stel­le up­zu­da­ten. Der Boot­loa­der sen­det im 9-Bit-Mo­de ein As­te­risk (*) mit ge­setz­tem 9. Bit. An­schlie­ßend war­tet er ma­xi­mal 17 ms auf Da­ten vom Host be­vor er das Haupt­pro­gramm an­springt. Dieses muss da­zu un­mit­tel­bar nach der Vek­tor­ta­bel­le be­gin­nen, al­so bei Adres­se 0x0013.

17 ms schei­nen sehr kurz da­für aber die An­zei­ge­ein­heit hat nichts an­de­res zu tun als da­r­auf zu war­ten und so ist der Zeit­rah­men mehr als aus­rei­chend.

Der äl­te­re Boot­loa­der war für den AT90S2313 ge­schrie­ben und sprang nach 0x000b. In der ak­tu­el­len Firm­ware ist dies kein Pro­blem da al­le In­ter­rupt-Vek­to­ren ab 0x000b nicht be­nutzt wer­den und eben­falls nach 0x0013 sprin­gen. Wenn je­doch spä­te­re Ver­sio­nen ins­be­son­de­re den Pin-Change-In­ter­rupt be­nut­zen wür­de der al­te Boot­loa­der nicht funk­tio­nie­ren. Be­den­ken Sie dies falls sie den al­ten Boot­loa­der im Ein­satz ha­ben.

Wenn der Host die Firm­ware än­dern will ant­wor­tet er mit ei­nem Dop­pel­kreuz und ge­setz­tem Bit 9. Bei an­de­ren Ant­wor­ten wird das Haupt­pro­gramm an­ge­sprun­gen.

Wird der Boot­loa­der ak­ti­viert, er­höht er das Time­out auf 1.1 s. In kei­nem Fall darf zwi­schen emp­fang­en­en Zei­chen mehr als 1.1 s ver­ge­hen sonst wird der Boot­loa­der be­en­det.

In den fol­gen­den Ta­bel­len ist Bit 9 durch die Farb­co­die­rung an­ge­zeigt. Ein ge­setz­tes Bit 9 wird gelb mar­kiert, ein ge­lösch­tes grün.

Die Da­ten sen­det das Dis­play bi­när in fol­gen­dem For­mat:

Daten ! (0x21) ADRhigh ADRlow Data Checksum 0x00
Länge 1 1 1 32 1 1

Das Aus­ru­fe­zei­chen ist das Schreib­kom­man­do. Die Adres­se ist in Bytes und muss an ei­nem Sei­ten­an­fang lie­gen. Es kann im­mer nur ei­ne Sei­te auf ein­mal und als gan­zes ge­schrie­ben wer­den.

Der Sen­sor pro­gram­miert die ent­spre­chen­de Sei­te und ant­wor­tet mit + bei Er­folg und mit - bei ei­nem Feh­ler. Auch die­sem folgt ein 0x00 um ei­ne ein­heit­li­che Te­le­gramm­en­de-Ken­nung ein­zu­hal­ten. Wenn Sie ver­su­chen ei­ne Sei­te im Ad­ress­be­reich des Boot­loa­ders zu än­dern wird er mit P ant­wor­ten was so­viel wie protected be­deu­tet. Die Sei­te wur­de in die­sem Fall nicht pro­gram­miert.

Die Ant­wor­ten des Sen­sors wer­den im Dis­play durch Set­zen der Flags BOOTLDOK, BOOTLDERROR und BOOTLDPROTECTED re­flek­tiert. BOOTLDPROTECTED wird da­bei igno­riert da das Sen­sor.hex-File auch den Boot­loa­der be­inhal­tet.

Wäh­rend des Schrei­bens wird die CPU an­ge­hal­ten. Der Host soll­te da­her kei­ne Zei­chen sen­den be­vor er das Quit­tungs­byte er­hält.

Das Dis­play kann die Firm­ware auch aus­le­sen. Dazu sen­det es fol­gen­des Te­le­gramm:

Daten ? (0x3F) ADRhigh ADRlow Checksum 0x00
Länge 1 1 1 1 1

Auch hier ist die Adres­se in Bytes, sie muss je­doch nicht zwin­gend auf ei­nem Sei­ten­an­fang lie­gen.

Der Sen­sor ant­wor­tet mit fol­gen­dem Te­le­gramm:

Daten = (0x3D) ADRhigh ADRlow Data Checksum 0x00
Länge 1 1 1 32 1 1

Bei der gan­zen Pro­ze­dur ist zu be­ach­ten, dass der Boot­loa­der nie­mals län­ger als 1.1 s auf ein Zei­chen war­tet. Bei Time­out oder Te­le­gramm­feh­ler wird der Boot­loa­der ab­ge­bro­chen und das evtl. bis da­hin ge­schrie­be­ne Haupt­pro­gramm an­ge­sprun­gen.

Der Boot­loa­der kann sich nicht selbst mo­di­fi­zie­ren und wird da­her Da­ten in sei­nem Ad­ress­be­reich igno­rie­ren. Dies gilt auch für Un­ter­pro­gram­me wie et­wa zum Senden und Emp­fangen auf der se­ri­el­len Schnitt­stel­le! Die­se wur­den, da sie so­wohl vom Boot­loa­der als auch vom Haupt­pro­gramm ge­braucht wer­den und als aus­ge­tes­tet und feh­ler­frei gel­ten, in den Ad­ress­be­reich des Boot­loa­ders ge­legt. Beim Schrei­ben der Pa­ge 0 wird der Re­set­vek­tor un­ab­hän­gig von den emp­fang­en­en Da­ten auf den Boot­loa­der ge­setzt. Die ein­zi­ge Mög­lich­keit, den Boot­loa­der selbst oder sei­nen Ein­sprung zu ver­än­dern wä­re der Down­load ei­ner ent­spre­chen­den Ap­pli­ka­tion.

Im fer­ti­gen Sys­tem läuft das gan­ze für den Be­nut­zer ziem­lich ein­fach ab. Geben Sie das Kom­man­do update. Das Dis­play sen­det da­r­auf­hin Waiting for Intel HEX file. Senden Sie nun das sensor.hex-File und der Rest geht au­to­ma­tisch.

Das File darf kei­ne Zei­len ent­hal­ten, die nicht mit ei­nem Dop­pel­punkt be­gin­nen (auch kei­ne Leer­zei­len), sonst schlägt die Pro­ze­dur fehl. AVR-Stu­dio er­zeugt die­ses File kor­rekt und Sie kön­nen es di­rekt ver­wen­den.

Be­nut­zen Sie den Boot­loa­der nicht wenn die Kom­mu­ni­ka­tion mit dem Sen­sor oh­ne­hin Pro­ble­me macht! Lösen sie die­se zu­erst. Obwohl der Boot­loa­der sich nicht selbst mo­di­fi­zie­ren kann (und Sie da­her nicht mit ei­nem to­ten Sen­sor en­den wer­den), kann der Sen­sor doch funk­tions­los zu­rück­blei­ben wenn Über­tra­gungs­feh­ler die kor­rek­te und voll­stän­di­ge Pro­gram­mie­rung ver­hin­dern.

Das Ver­fah­ren er­in­nert ein we­nig an das ei­ner Raum­son­de die, ein­mal ge­star­tet, nicht mehr phy­sisch er­reich­bar ist. Man kann nicht ein­fach hin­flie­gen, den De­ckel auf­ma­chen und Sprit nach­fül­len. Das war aber auch hier das Ziel, nicht bei Schnee und Regen in die Zis­ter­ne klet­tern zu müs­sen son­dern al­les be­quem vom Wohn­zim­mer aus zu er­le­di­gen.