SAMD21G18にArduinoのブートローダを書き込む ~Seeeduino xiaoのパチもんを作る~
Arduinoの開発ボード使ってると、自分でICからボード作ってみたくなるよね。
Seeeduino xiaoのパチもん作ったので備忘録です。
①イントロダクション
==事の発端==
1.Seeeduino xiaoサイコー!チッチャカワイイ!
2.xiaoのwikiページに回路図あるやんけ!
3.Seeedのgithubにブートローダファイルあるやんけ!
4.IC買ってパチもん作ったろ!
========
今回はARMマイコン「SAMD21G18」を使ってxiaoのパチもんを作ってみます。
↓こんな感じになります。
②必要なもの
1. 今回の目玉のARMマイコン「SAMD21G18」 →digikey購入先
2. J-linkデバッカ「j-link edu mini」 →digikey購入先
(注)nucleoのst-linkをj-link化させる方法がありますが、それではSTMマイコンでしか使えないようです。
これを機にj-link買っちゃいましょう。
3. SAMD21G18用の48TQFPブレイクアウト基板 →digikey購入先
4. 32.768kHz水晶振動子 →digikey購入先
5. USBコネクタのメス(スケッチ書き込み&給電用)
6. 3.3vレギュレータ
7. 抵抗とコンデンサがいくつか(後述の回路図参照)
digikey購入先は今回自分が使ったものを載せてます。参考までに。
水晶振動子なんか周波数あってりゃ何でもいいと思います。
③ハード部分づくり
xiaoのwikiページの最後に回路図があるので、こちらを参考にブレッドボードにパーツを置いていきます。
→https://wiki.seeedstudio.com/jp/Seeeduino-XIAO/
とりあえず、マイコン部分・リセット部分・3.3V生成部分は回路図通りで大丈夫です。
USB_D+、USB_D-、GND、5Vはそれぞれ準備したUSBコネクタのメス(以下パチもん側USB)につなぎます。
j-linkは以下のようにマイコン部分につなぎます。
参考→https://www.embitek.co.jp/product/jlink-edu-mini.html
j-link <ー> マイコン部分
VTref <ー> 3.3V
GND <ー> GND
SWDIO <ー> PA31_SWDIO
SWCLK <ー> PA30_SWCLK
ソフトウェアリセットがあるためResetには配線不要らしいです。
SWD通信って便利だなぁ(*´ω`*)
あとはLチカ用に26ピンにLEDつないでおくといいかも。
④J-linkのセットアップ
J-linkのドライバを持ってくるため、以下のパックをPCにインストールします。
各自のOSに合うものをダウンロードしてください。
「J-Link Software and Documentation Pack」
⑤Atmel Studioのインストール
このソフトでSAMD21G18にブートローダを書き込んでいきます。
リンク先からダウンロードしてインストールしてください。
→https://www.microchip.com/mplab/avr-support/atmel-studio-7
インストール中、以下の画面では「SMART ARM MCU」を選択してください。
⑥J-linkにSAMD21G18を認識させる
j-linkデバッカとパチもん側USBをPCにつなぎ、Atmel Studioを起動します。
「Tools」→「Device Programming」を選択します。
Tool:J-link
Device:ATSAMD21G18A
Interfase:SWD
上記のように選択し、Applyを選びます。
その後、Device signatureのReadを選択します。
問題なければJ-linkでSAMD21G18が認識されます。
⑦SAMD21G18のフラッシュ消去&ヒューズチェック
左欄の「Memories」→「Erase now」で内部フラッシュを消去します。
左欄の「Fuses」を選択して、特にエラーがなければOKらしいです。
⑧ブートローダの書き込み
以下からxiaoのブートローダファイルをダウンロードしてください。
Atmel Studioの「Memories」の「Flash」に、ダウンロードしたファイルを選択し、「Program」で書き込みます。
エラーなく書き込みが終わったら、J-linkとパチもん側USBをPCから外します。
再度パチもん側USBをPCにつないで、Seeeduino xiaoと認識されれば完成\(^o^)/
J-linkはブレッドボートから外して大丈夫です(*^^*)
今後は純正xiaoと同じように使えるはずです。
終わり
参考記事
・https://www.instructables.com/id/ATSAMD21g18-Bootloader-With-J-link-Debugger/
・https://forum.seeedstudio.com/t/possible-reset-boot-loader-problem/252560
ICS変換基板の自作
①ICS変換基板を使う
②半二重通信が使えるマイコンを使う
③近藤サーボをスレーブ設定にして使う(未確認・要検証)
②本題
ICS変換基板のマニュアルには回路図が丁寧に記載されています。
→https://kondo-robot.com/faq/ics_adapter_manual
こちらから自分が使うようにkicadに起こしたのが以下になります。
回路図のラベルはICS変換基板の表記と合わせてるはずです。
③使用例
ESP32同士をBluetoothシリアルでつないでみる
①スレーブ側のESP32のBluetooth用MACアドレスを確認する。
void setup(void) {
Serial.begin(115200);
Serial.println("-----------------");
uint8_t macBT[6];
esp_read_mac(macBT, ESP_MAC_BT);
Serial.printf("%02X:%02X:%02X:%02X:%02X:%02X\r\n", macBT[0], macBT[1], macBT[2], macBT[3], macBT[4], macBT[5]);
}
void loop() {
delay(1000);
}
②マスター側のサンプルプログラムを微修正して書き込み
//This example code is in the Public Domain (or CC0 licensed, at your option.)
//By Victor Tchistiak - 2019
//
//This example demostrates master mode bluetooth connection and pin
//it creates a bridge between Serial and Classical Bluetooth (SPP)
//this is an extention of the SerialToSerialBT example by Evandro Copercini - 2018
//
#include "BluetoothSerial.h"
BluetoothSerial SerialBT;
String MACadd = "1A:2B:3C:4D:5E:6F";
uint8_t address[6] = {0x1A, 0x2B, 0x3C, 0x4D, 0x5E, 0x6F};
//uint8_t address[6] = {0x00, 0x1D, 0xA5, 0x02, 0xC3, 0x22};
String name = "OBDII";
char *pin = "1234"; //<- standard pin would be provided by default
bool connected;
void setup() {
Serial.begin(115200);
//SerialBT.setPin(pin);
SerialBT.begin("ESP32test", true);
//SerialBT.setPin(pin);
Serial.println("The device started in master mode, make sure remote BT device is on!");
// connect(address) is fast (upto 10 secs max), connect(name) is slow (upto 30 secs max) as it needs
// to resolve name to address first, but it allows to connect to different devices with the same name.
// Set CoreDebugLevel to Info to view devices bluetooth address and device names
//connected = SerialBT.connect(name);
connected = SerialBT.connect(address);
if(connected) {
Serial.println("Connected Succesfully!");
} else {
while(!SerialBT.connected(10000)) {
Serial.println("Failed to connect. Make sure remote device is available and in range, then restart app.");
}
}
// disconnect() may take upto 10 secs max
if (SerialBT.disconnect()) {
Serial.println("Disconnected Succesfully!");
}
// this would reconnect to the name(will use address, if resolved) or address used with connect(name/address).
SerialBT.connect();
}
void loop() {
if (Serial.available()) {
SerialBT.write(Serial.read());
}
if (SerialBT.available()) {
Serial.write(SerialBT.read());
}
delay(20);
}
③スレーブ側のサンプルプログラムを修正せずに書き込み
④シリアルモニタで接続確認
HTH4のプロジェクトをクラウドに自動でバックアップする
<はじめに>
ROBO-ONEまで2週間を切りました。
皆さんモーション作成を頑張っていることでしょうが、バックアップできてますか?
自分が日頃お世話になっている、クラウドを使ったやり方をつらつら書いていきます。
※あくまで自己責任でお願いします。データの損失といった責任は負いかねます。
これ書いとかねーと後が怖い(;^ω^)
<クラウドは何を使うか>
<まずは登録・インストール>
上記のリンクからでもいいですが、友達招待用のリンクからだとお互いに500MB容量が追加されます。
(無料版は最初2GB)
よろしければ↓のリンクからどうぞ。
登録が済んだら、↓のリンクからクライアントソフトをインストールします。
https://www.dropbox.com/ja/downloading
インストールが済めば、下のようにエクスプローラの左枠にDropboxの共有フォルダが生成されていると思います。