多分これでできたりしそうな。5V/3.3V変換とか発振器の用意が面倒なので試してませんが。
ボードライブラリ: Raspberry Pi Pico
リポジトリ https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json から取得する物で、mbed版ではないので注意
[ツール]-[USB Stack]-> Adafruit Tiny USB に設定
ライブラリ: Adafruit TinyUSB Arduino
Arduino
1#include <Adafruit_TinyUSB.h>
2
3#define LED LED_BUILTIN
4const int RESET=9;
5uint32_t t0;
6int lastDTR;
7int lastbaud;
8void setup() {
9 pinMode(LED, OUTPUT); //デバッグ用
10 pinMode(RESET, OUTPUT); //ターゲットリセット用
11 digitalWrite(RESET,HIGH);
12 Serial.begin(115200);
13
14 while(!Serial); //USBシリアルが接続されるまで待つ
15 int baud=Serial.baud(); //接続されたボーレートを取得する
16 lastDTR=0;
17 lastbaud=baud;
18 Serial1.begin(baud);
19}
20
21void loop() {
22 if(Serial.available()){
23 Serial1.write(Serial.read());
24 }
25 if(Serial1.available()){
26 Serial.write(Serial1.read());
27 }
28 int currentDTR=Serial.dtr();
29 if(lastDTR==0 && currentDTR!=0){
30 t0=millis();
31 }
32 lastDTR=currentDTR;
33 int rst=HIGH;
34 if(millis()-t0<100){
35 rst=LOW;
36 }
37 digitalWrite(RESET,rst);
38 digitalWrite(LED,!rst);
39 if(Serial.baud()!=lastbaud){
40 Serial1.end();
41 lastbaud=Serial.baud();
42 Serial1.begin(lastbaud);
43 }
44}
USB側をCDC(つまり仮想シリアル)で接続すると、そのボーレートを検出してUART(Serial1)を設定し、USB-UART間のデータを中継します。ボーレートの変更を検出したときは再設定します。
また、DTRを検出し、DTRがアクティブになった時にPIO(とりあえずなんとなく9pin)を100msLにすることでターゲットにリセットをかけます。