ATtiny mit PLL Clock für serielle Datenübertragung
von
am 23.02.2017 um 18:20 (3906 Hits)
Wie früher schon geschrieben, möchte ich Fahrdaten vom TT auf einen eigenen portablen Flashspeicherchip schreiben und nach der Fahrt offline am PC auswerten. Die Daten sollen vom TT-µC (ATtiny861A) erst über zwei Datenadern zu einem ATTiny25/45 gelangen, der als Schnittstellenumsetzer und Buffer dienen soll und dann den Flashchip 45DB041B per SPI oder eventuell auch einen neu gefundenen 24C65 8kbyte Speicher mit I2C bedient. Dazu habe ich nun begonnen, erstmal die früher schon verwendeten Zweiaderroutinen zu überarbeiten.
Da der TT-µC durch das Versenden der Daten an den Flash möglichst nicht in seinen anderen Aufgaben aufgehalten wird bzw schnell arbeiten soll, suche ich immer nach Optimierungen. Ganz ahnungslos stieß ich auf die Tatsache, daß zufällig beide µC, die ich verwende, der ATtiny861A und der ATtiny25/45 über einen "High Frequency PLL Clock" verfügen, der es erlaubt mit dem internen RC-Oszillator einen 16Mhz Systemtakt zu erzeugen.
Fuses in beiden µC umgestellt und schon liefen die µC mit internem Oszillator statt mit 8 Mhz, mit 16 Mhz. Dann noch mit Verbesserungen an den früher verwendeten ASM-Routinen für das Zweiaderzwangslaufverfahren läuft nun ein Byte, gemessen, in weniger als 19µs von einem µC zum anderen (3 Bytes hintereinander ca 56µs). Das entspricht einer Bitrate von weit über 400000 Bit/s.
Das sollen, bis auf die ersten 3 oder 4 Bytes eines Übertragungsblocks, reine Nutzdaten sein. Das erste der drei Byte enthält ein Bit, daß dem Tiny25/45 anzeigt, ob der Flasch beschrieben oder gelesen werden soll. Die restlichen Bits im ersten Byte und eventuell zweiten Byte sollen die Übertragungsblocklänge enthalten, also wieviele Nutzdatenbytes geschrieben bzw gelesen werden sollen, bevor neue drei/vier Administrationsbytes geschickt werden. Die letzten beiden Bytes der 3 oder 4 Bytes können die Schreib-/Leseadresse im Flash angeben.
Weil eine Serie von zB 8 Nutzdatenbytes für zB ein Pagewrite im Flash nach der Initialisierung des Tiny25/45 mit den 3/4 Administrationsbytes auch tropfenweise, je nach Aufkommen, zum Tiny25/45 übertragen werden, brauche ich noch eine Art Stop-Signal. Damit soll über die zwei CDLs (Compelled Data Lines) dem Tiny25/45 angezeigt werden, daß eine Pause in der Übertragung stattfindet und er zB wieder den Flash bedienen kann. Möglich wäre es dafür, beide Leitungen gleichzeitig vom Sender aus für eine kurze, vorbestimmte Zeit auf LOW zu ziehen. Dieser Zustand wird vom Sender bei der Datenübertragung nicht benutzt. Das könnte aber die Datenübertragungsrate leider wieder unter 400000 Bit/s drücken und viel schlimmer, nicht mehr dem schönen reinen Zwangslaufverfahren entsprechen, da nicht quittiert wird, ob die Pause akzeptiert wird
Der Teil ist noch nicht richtig zu Ende gedacht und muß vor allem noch ausprobiert werden. Spannend wird es dann noch im Tiny25/45, wenn die Routinen zum Flashinterface dazukommen.
Gruß
Searcher