それで、アトメロフスクプロトコルの棚が到着しました-ISP、JTAG、debugWIRE、TPI、aWire、PDI、今ここにUPDIがあります。 同時に、AVRの生態系の状況は依然として非常に絶望的であるため、それらの使用を完全に放棄するつもりでしたが、最新のトレンドは少し喜んでくれたため、この記事を執筆しました。
Atmel ICEプログラマーの幸運な所有者だけがUPDIプロトコルを使用できます。UPDIプロトコルは、コネクターのかなり奇妙な選択のために使用するのにあまり便利ではなく、工業規模で購入する余裕はそれほどありません。 さらに、Atmel Studioをインストールする必要がありますが、当社のポリシーによると、ほとんどのコンピューターはインターネットにアクセスできず、スタジオはドライバーまたは一部のライブラリのいずれかで定期的にクロールするため、Atmel Studioを定期的に使用することを拒否します。プログラマーがシステムに表示された瞬間、つまり、ドライバーが正しくインストールされたが、ネットワークにアクセスし、強制的に更新されない限り、彼はスタジオ自体に気づかれませんでした。
そのため、開発で新しい便利なATTiny1616マイクロコントローラーを使用し始めた直後(その利点について)、本番環境でブートローダーコントローラーに書き込むために使用できるツールが必要でした。 もちろん、
少し検索した後、 Github (https://github.com/mraardvark/pyupdi)でpyupdiプロジェクトを発見しました。これはPythonでのUPDIプロトコルの実装であり、この実装はレベルコンバーターを除いて通常のUARTプロトコルに基づいています。さらに便利です。標準のFTDIコンバーターチップまたはそれらに対応する中国のCH340 / 341を使用できるためです。
プロジェクトがダウンロードされてテストされ、非常に元気になりました。 しかし、数日後、彼はまだ私たちに適していないことが明らかになりました。 理由:
- Pythonとパッケージのグループ全体のインストールが必要です(インターネットにアクセスできないコンピューターについて話していることを思い出します)、依存関係で互いに引っ張るほぼ12個の異なるパッケージをダウンロードして手動でインストールする必要がありました。 はい、原則として、Pythonのスクリプトから別のコンピューターで実行可能ファイルを作成できます。これにより、問題が何らかの形で解決されましたが、問題のリストはそこで終わりませんでした
- スクリプトにはほとんどエラーチェックがありません。エラーはすべてのファイルが相互にリンクしていることを示す割り込みで終了します。
- コントローラの内容を読むことは不可能です
- ヒューズを読み取る方法はありません
- スクリプトの速度は望まれていません。16kbがほぼ1分間書き込まれます。これは、転送中に最適化が行われないためです。すべてが厳しいタイミングに基づいています。
- 記録プロセスの表示の欠如
- プロジェクトは、サポートできるプロセッサの数をサポートしていません
- プロジェクトは半分死んでおり、リクエストに応答しません
この問題はPythonのフレームワーク内でしばらくの間解決されましたが、修正後、プロジェクトを再構築し、テストする必要があったため、より馴染みのある、つまりCでスクリプトを書き直したいという要望がありました。 結局のところ、私たちは包埋者です!
次に、新しいtinyAVR 1シリーズの利点について簡単に説明します。
- 周辺機器と2 kb〜32 kbの範囲のアドレス空間の実際の統合
- 便利なブートローダー設定(メモリの先頭に!)
- ISP(インシステムプログラミング)アルゴリズムの大幅な簡素化
- フォンノイマン建築への移行
- 24ピンの小さなパッケージ(3x3 mm)で最大32 kbのフラッシュメモリ、最大22(!)をIOとして使用可能
- 16/20 MHzの内部発振器の存在
- ヒューズの構成へのパフォーマンスの依存度が低い(永続的な頭痛AVR)
- 小型コントローラー向けの優れたアナログ部品(ADC / DAC /入力/出力の内部および外部切り替えの可能性を備えたコンパレーター)
- 単線プログラミングおよびデバッグ
- 非常に低い小売価格(16 kbで0.6ユーロから)
プログラマーの鉄の部分として、次のように、中国のCH340チップに基づいた利用可能なUSB-UART TTLコンバーターを使用しました。
プログラミングには、2つの出力RXとTXを接続するだけで十分です。これらの出力には既に1.5kの出力抵抗が装備されているため、コンバータモデルに抵抗がない場合は追加する必要があります。 組み合わされた出力は、プログラム可能なチップのUPDIピンに接続されます。コンバータのグランドもコントローラのグランドに接続する必要があります。 外部電源がある場合は、コンバータが使用する電力(3.3Vまたは5V)に対応するかどうかにのみ注意を払う必要があります。 必要がある場合は、コントローラーとコンバーター自体から回路に電力を供給できます。これは初期プログラミングに非常に便利です。
注意! 抵抗はオプションであり、コンバータの出力に保護抵抗がない場合にのみはんだ付けする必要があります。
CH340チップに接続されている唯一の問題は、プログラミングバージョンでパリティビットが使用されており、カーネルバージョンのCH340ドライバーがこのビットで正しく動作しないため、Linuxバージョンのプログラムで動作しなかったことです。 この問題は近い将来修正されるかもしれませんが、今のところ私はこれを行う忍耐を持っていません。
IDE Code :: Blocksでの作業と実験の結果、 updiprogプログラムが作成およびデバッグされ、そのソースコードがGithubに投稿されました 。
このバージョンのプログラムに実装されたもの:
- コントローラのフラッシュメモリの内容を16進ファイルに読み込む機能が追加されました
- すべてのコントローラーヒューズのステータスを読み取る機能を追加
- 可能な場合は、対応するメッセージにエラー処理を追加しました
- 書き込み/読み取りのプロセスの表示を追加
- 速度が大幅に向上しました(16 kbを読み取るのに約6秒)
- すべての1シリーズマイクロコントローラーのサポートを追加
Pythonでコンパイルされたソーススクリプトの5 kopecksと比較して、プログラムの初期サイズは約25 kbです。
完了した作業が誰かに役立つことを願っています。 私はレビューと提案を喜んでいるでしょう。