ATmega128RFA1 甚の OTA ブヌトロヌダヌを䜜成しおいたす (Smart Response XE デバむスの䞀郚ずしお)

ATmega128RFA1 甚の OTA ブヌトロヌダヌを䜜成しおいたす (Smart Response XE デバむスの䞀郚ずしお)

すべおは、著者が流通垂堎で興味深いデバむスである Smart Response XE (簡単な説明。 これは孊校を察象ずしおいたす。クラスの各生埒には電子ノヌトや 802.15.4 幎代の翻蚳機に䌌たデバむスが䞎えられ、教垫が質問し、生埒はデバむスのキヌボヌドで回答を入力したす。無線チャネル (XNUMX) を教垫の PC に接続されおいる受信機に送信したす。

これらのデバむスは数幎前に廃止され、孊校がそれぞれ 100  200 ドルで賌入したものが、珟圚 eBay で 10 ドル以䞋で出品されおいたす。 そこのハヌドりェアはマニアックな実隓に非垞に適しおいたす。

  • 60鍵キヌボヌド
  • 解像床 384×136、ピクセルあたり 2 ビットのディスプレむ - BC、CGA に䌌おいたすが、4 色ではなく、明るさのグラデヌションです。
  • マむクロコントロヌラ ATmega128RFA1 (128 kB フラッシュ メモリ、4 kB ROM、16 kB RAM、802.15.4 トランシヌバ)
  • 倖郚 (デバむス党䜓ではなく、マむクロコントロヌラヌに関連しお) SPI むンタヌフェむス付き 1 メガビット (128 キロバむト) フラッシュ メモリ
  • 4぀のAAA゚レメント甚のコンパヌトメント。

マむクロコントロヌラヌの名前から、それが AVR ファミリに属しおいるこずは明らかです。぀たり、デバむスを Arduino 互換にするのは簡単な䜜業ではないこずを意味したす...

のニュヌスから ハッカディ 著者はそれが䜕なのかを発芋した もうやった (同じリンクで、䜕をどこに接続するかがわかりたす)、Arduboy 甚のゲヌムを実行する機䌚がありたす。


しかし、著者はデバむスでプレむするのではなく、以䞋を孊ぶ機䌚にもっず興味がありたす。

  • シリアルSPIむンタヌフェヌスを備えたフラッシュメモリ
  • AVR甚ブヌトロヌダヌ
  • 暙準802.15.4

著者はこう曞き始めた ラむブラリヌ (GPL v3)。これにより、ディスプレむの初期化、テキストず四角圢の出力、SPI フラッシュ メモリぞのアクセスが可胜になりたす。 そしお、VT-100互換のポケット端末、マルチプレむダヌゲヌムなど、デバむスの実甚化に向けたアむデアを考え始めたした。 XNUMX 台のデバむスを再構築した埌、圌はスケッチを「無線で」受信できるように「教える」こずにしたした。 興味深いだけでなく、非垞に䟿利なこずもありたす。デバむスのケヌスは毎回開けるのが難しく、バッテリヌ収玍郚のカバヌの䞋には、JTAG プログラマをボヌドに接続するための穎しかありたせん。

ATmega128RFA1 甚の OTA ブヌトロヌダヌを䜜成しおいたす (Smart Response XE デバむスの䞀郚ずしお)

Arduino ブヌトロヌダヌをアップロヌドするにはこれで十分ですが、スケッチはアップロヌドできたせん。シリアル ポヌトがそこに接続されおいないため、ケヌスを開けずにアップロヌドするこずはできたせん。 たた、最初のシリアル ポヌトの TX0 および RX0 ラむンは、キヌボヌド マトリックスのポヌリング ラむン、぀たりディスプレむの偎面にあるファンクション キヌをポヌリングするラむンず結合されたす。 しかし、䜕ができるでしょうか - 著者はこれを䜜成したした:

ATmega128RFA1 甚の OTA ブヌトロヌダヌを䜜成しおいたす (Smart Response XE デバむスの䞀郚ずしお)

圌はそこに JTAG ラむンを導入したので、今ではバッテリヌ コンパヌトメントを開ける必芁はありたせん。 スケッチをアップロヌドできるように、䞡方のシリアル ポヌトを同じコネクタに接続し、スむッチも远加したした。バッテリヌが取り付けられおいるず、他の方法でデバむスの電源をオフにするこずが物理的に䞍可胜だからです。

はんだごお、カッタヌナむフ、グルヌガンを䜿っお䜜業するずかなり時間がかかりたした。 䞀般に、スケッチを「無線で」アップロヌドする方がはるかに䟿利なので、このための䜕かを早急に発明する必芁がありたす。

Arduino IDEはプログラムを䜿甚しおスケッチをアップロヌドしたす アノェルデ。 プロトコルを䜿甚しおマむクロコントロヌラヌず察話したす。 STK500を䜿甚するず、ファむルを䞡方向に転送できたす。 可倉的な遅延、歪み、デヌタ損倱が発生する可胜性があるチャネルずは互換性が䜎くなりたす。 シリアル チャネルで䜕かが倖れたり、ガサガサ音がしたりするず、その原因を探すのに倢䞭になるこずがありたす。 か぀お、著者は、問題が䞍良ケヌブルず気たぐれな CP2102 むンタヌフェむス コンバヌタであるこずに気づくたで半日苊しみたした。 ATmega32u4 などのむンタヌフェヌスコンバヌタを内蔵したマむコンでも、このような動䜜をするこずがありたす。 すべおの Arduino ナヌザヌは、スケッチをアップロヌドする際の゚ラヌがそれほど珍しいこずではないこずに気づいおいたす。 堎合によっおは、蚘録は正垞に完了しおも、テスト読み取り䞭に゚ラヌが怜出されるこずがありたす。 これは、曞き蟌み䞭に゚ラヌが発生したこずを意味するのではなく、読み取り䞭に゚ラヌが発生したした。 ここで、「無線」で䜜業するずきに同じこずが、より頻繁に起こるず想像しおください。

この問題を解決するためにさたざたな方法を詊した結果、著者は次のこずを思い぀きたした。 このデバむスには SPI むンタヌフェむスを備えた 128 KB のフラッシュ メモリが搭茉されおいたす。有線でデヌタを受信し (䜜者はすでに偎面にコネクタのあるデバむスを XNUMX 台持っおいるこずを思い出しおください)、このメモリをバッファずしお䜿甚し、無線でデヌタを送信したす。別のデバむスにチャネルを接続したす。 サむビコからこんにちは。

ラゞオ チャネルずフォントを操䜜するコヌドを䜜成した埌、ロヌダヌは 4 キロバむトを超えたした。 したがっお、HFUSE 倀を 0xDA から 0xD8 に倉曎する必芁がありたした。 ブヌトロヌダヌの長さは最倧 8 キロバむトになり、開始アドレスは 0x1E000 になりたした。 これは Makefile に反映されたすが、入力時にも考慮する必芁がありたす。 ブヌトロヌダヌ avrdude経由。

ATmega802.15.4RFA128 の 1 トランシヌバヌは、元々、次のプロトコルを䜿甚しお動䜜するように蚭蚈されおいたす。 ゞグビヌこれは非垞に耇雑なので、著者は代わりにパケットを送信するこずにしたした。 これはATmega128RFA1のハヌドりェアに実装されおいるため、必芁なコヌドはほずんどありたせん。 たた、簡単にするために、䜜成者は固定チャンネルを䜿甚するこずにし、手動でも遞択できないようにしたした。 802.15.4 暙準は、16 から 11 たでの番号を持぀ 26 チャネルをサポヌトしたす。それらは非垞に混雑しおおり、䞀郚は WiFi チャネルず重耇しおいたす (赀は ZigBee チャネル、青、緑、黄色は WiFi)。

ATmega128RFA1 甚の OTA ブヌトロヌダヌを䜜成しおいたす (Smart Response XE デバむスの䞀郚ずしお)

チャネル 15 ず 26 は WiFi からの干枉の圱響を最も受けにくいこずが刀明し、著者はそのうち XNUMX 番目を遞択したした。 免責事項: 翻蚳者は、この方法で ZigBee を簡略化するこずが蚱可されおいるかどうかを知りたせん。 もう少しプログラミングをしお完党に実装したほうがいいでしょうか

最初のデバむスでは、STK500 プロトコルを介しおデヌタを送信する有限状態マシンを実装する必芁がありたす。 ほずんどの堎合、送受信されるメッセヌゞは自己完結したすが、䞀郚は以前にチャネルを通過したメッセヌゞに関連付けられおいたす。 ダむアログの説明が蚘茉されおいたす ここで.

このダむアログの重芁なコンポヌネントは、宛先デバむスのフラッシュ メモリに曞き蟌たれるパケットの送信です。 AVR ファミリの単玔なマむクロコントロヌラの堎合、ペヌゞ サむズは 128 バむトですが、ATmega128RFA1 の堎合は 256 バむトです。たた、SPI プロトコルを介しお接続されおいるフラッシュ メモリの堎合も同じです。 最初のデバむスのプログラムは、スケッチをアップロヌドするずきに、スケッチをすぐに 500 番目のデバむスに転送せず、このメモリに曞き蟌みたす。 Arduino IDE が゚ントリの正しさをチェックするず、そこに曞き蟌たれた内容が送信されたす。 次に、受信したデヌタを無線チャネル経由で 128 番目のデバむスに送信する必芁がありたす。 同時に、受信から送信ぞの切り替え、およびその逆の切り替えが頻繁に発生したす。 STK1 プロトコルは遅延には無関心ですが、デヌタ損倱は蚱容したせん (奇劙なこずに、遅延もデヌタ転送に圱響を䞎えるず䞊で述べたした)。 たた、無線䌝送䞭の損倱は避けられたせん。 ATmegaXNUMXRFAXNUMXには、転送の正確さに疑問がある堎合の繰り返しリク゚ストのハヌドりェア実装が組み蟌たれおいたすが、䜜者は同じこずを自分で゜フトりェアに実装するこずにしたした。 圌は、䞀方方向よりもはるかに倚くのデヌタが他方方向に流れるプロトコルを開発したした。

完璧ではありたせんが、機胜したす。 256 バむトのペヌゞは 125 ぀のセグメントに分割され、それぞれがパケットずしお無線送信されたす。 パケットは最倧 64 バむトのデヌタず、長さの 0 バむトず CRC の 3 バむトを保持できたす。 したがっお、XNUMX バむト長のフラグメントずペヌゞ番号およびセグメント番号 (XNUMX から XNUMX) がそこに配眮されたす。 受信デバむスには、受信したセグメントの数を远跡できる倉数があり、XNUMX ぀すべおが到着するず、送信デバむスはペヌゞ党䜓が受信されたこずの確認を受け取りたす。 確認なし (CRC が䞀臎したせんでした) - ペヌゞ党䜓を再送信したす。 ケヌブル経由で送信する堎合よりもさらに高速になりたす。 芋る


ただし、䞀般に、スケッチをアップロヌドしたり、それを介しおデバむスにケヌブルを接続したりするための䟿利な方法を提䟛する必芁がありたす。 䟋えば、写真のようにCP2102のむンタヌフェヌスコンバヌタの䞭に入れお、Micro USBケヌブルの抜き差し時の力に耐えられるように基板に接着したす。

ATmega128RFA1 甚の OTA ブヌトロヌダヌを䜜成しおいたす (Smart Response XE デバむスの䞀郚ずしお)

たた、3,3 ボルトのスタビラむザヌも備えおいたす (6 ボルトの電源を備えたデバむスでそれを䜿甚する方法 - 同じスタビラむザヌを備え、XNUMX ぀のダむオヌドを远加しおどちらがデバむスに電力を䟛絊するかを自動的に遞択できる堎合のみ) 。 XNUMX ぀の LED はすべお、むンタヌフェむス コンバヌタ ボヌドからはんだ付けを倖す必芁がありたす。そうしないず、LED の動䜜時にバッテリに䜙分な負荷がかかり、キヌボヌドのポヌリングや SPI むンタヌフェむスを備えたフラッシュ メモリの動䜜も劚げられたす。

目暙を远求するこずは、それを達成するこずよりもさらに興味深いこずがわかりたしたバスに぀いおの冗談は必芁ありたせん。 著者は、AVR ブヌトロヌダヌ、SPI フラッシュ メモリ、STK500 プロトコル、および 802.15.4 暙準に぀いお倚くのこずを孊びたした。

䞊蚘のラむブラリに加えお、他のすべおのコヌドは- ここで、GPL v3 にも準拠しおいたす。 䜜者のツむッタヌ - ここで.

出所 habr.com

コメントを远加したす