あなたは正しいです。その理由は、ブートローダーと呼ばれるものです。
最も必要最小限の状態では、Arduinos が構築されているマイクロコントローラー (以降、uC) は、SPI プロトコルの特定の実装であるインシステム プログラミング (ISP) メソッドを介してプログラムできます。これについて知っておく必要がある唯一のことは、これがシリアルまたは USB ではないということです。
AVR チップ (および Arduino ボード) をシリアル/USB 経由でプログラム可能にするために、ブートローダーと呼ばれるプログラムを (ISP 経由で) チップにロードします。ブートローダは、シリアル リンクを介してプログラム データを読み取り、フラッシュに書き込みます。ロードするプログラムがない場合、ブートローダーはロードされたプログラムに制御を与えます。したがって、ブートローダは、電源を入れるかリセットした後にのみアクティブにすることができます。その後、ロードしたプログラムを実行し、再びアクティブになることはありません。
ほとんどのブートローダは、リセット後にのみプログラミング データを探すように設定されています。その理由は、シリアル データの待機にはタイムアウトが伴うためです。アップロードされているプログラムがあり、送信されている場合はプログラムをロードします。Arduino がオンになるたびにブートローダがプログラミング データを探していた場合、Arduino は遅延してのみアクティブ化され、これは望ましくないと見なされていました。したがって、ブートローダーはリセット後にのみアクティブになります。
ユーザーが Arduino をプログラムする前に毎回リセット ピンを押す必要があり、さらに、リセット直後にシリアル データの送信を開始する (またはタイムアウト ウィンドウを見逃す可能性がある) ことをユーザーに強制するのは煩わしい場合があります。 Arduino の賢い人たちは、DTS 信号を使用してリセットをトリガーし、その後データを送信するというトリックを思い付きました。したがって、Arduino (古いものでない場合) は、DTS 信号の受信時にリセットするように設定されています。