セキュリティ・キャンプ2022のX3【ハードウェア魔改造ゼミ】に通過したので応募課題の回答を公開します。
応募したコース
「電気回路からHTTPに至るまで全レイヤーに触れる」というところが楽しそうだったので、X3を第一希望にしました。X1とX4も課題の内容が被っていたため応募しておきました。
課題
セキュリティ・キャンプ全国大会2022 オンライン 開発コース X3【ハードウェア魔改造ゼミ】応募課題
(1)以下の技術用語について解説してください。またどのようなところで使われているかも述べてください。わからない場合は調べて、自分なりに解釈した結果を述べてください。
「オームの法則」「UART」「SPI(Serial Peripheral Interface)」(2)マイコンのファームウェアをデバッグするためには、どういう方法がありますか?
(3)電気には直流と交流があります。同じ電圧のとき、どちらが感電したときに危険だと思いますか?その理由と一緒に説明して下さい。また感電はどんな工夫をすれば防げるでしょうか、思いつく限り多く挙げてください。
(4)このデータシートから、以下の情報を読み取ってください。
データシートURL:
https://datasheets.raspberrypi.com/rp2040/rp2040-datasheet.pdf
rp2040-product-brief.pdf (raspberrypi.com)・GPIOに5.0Vを入力しようと思います。この機器は正常に動作しますか?
・この機器でSPI通信は使用できますか?
・IOVDDとDVDDの違いを説明してください
・SWDポートを使うと何ができますか?
・GPIO 1ポートから標準で何mA出力できますか?またGPIO合計で最大何mAまでの電流を出力できますか?(ただしQSPIポートで使用する電流は考慮しないものとします)(5)以下の質問に答えてください。
・電波を発射する装置を日本国内で合法的に使用するには、「電波法で定められた基準に適合しているという証明」が得られた無線機が必要です。この証明の名前はなんですか?
・市販されている無線ルーターの多くには、機能を完全に置き換えられる純正ではないファームウェアが存在します。非純正のファームウェアがインストールされた状態でWi-Fiを有効化すると、上記の証明が無効になり違法となる可能性があります。何を原因としてその可能性が生じるのか考察してください(簡潔な記述を望みます・400文字以内)。
回答
※内容の正確性は保証できません
(1)技術用語の解説
オームの法則
オームの法則は、回路に流れる電流Iが電圧Vに比例するという法則であり、V=RIと表されます。この比例定数Rを電気抵抗といいます。これは電磁気学の範囲では導出できない経験則で、導出する場合には物性物理の範囲に踏み込む必要があります。また、オームの法則に従わない非線形素子も存在し、半導体はまさに非線形素子です。
オームの法則なしに電気回路について考えることはできません。単純な例として、LEDの保護抵抗を計算するためにもオームの法則は必要です。定格の電流を流すため、電源電圧からLEDの電圧降下を引いた電位差を定格電流で割ることにより保護抵抗を求めます。この抵抗を直列にLEDに接続することでLEDに定格電流を流すことができます。
UART
UARTはUniversal Asynchronous Receiver/Transmitterの略で、2つのデバイスの間でシリアル通信を行うプロトコルです。
シリアル通信は、複数の信号線を用いてデータをまとめて送受信するパラレル通信に対して、データを1bitずつ順に送受信する通信方式です。組み込み用途で使われるシリアル通信としては、UART・SPI・I2Cが有名です。
シリアル通信には、1対多で通信できるものもありますが、UARTは1対1の通信で、マスター(親機)・スレーブ(子機)の区別はありません。
UARTでは基本的には送信用のTXと受信用のRXという信号線のみで通信します。片方機器のTXをもう片方の機器のRXに繋いでデータを送ることができます。基本的には互いにTXとRXを接続する全二重通信を行いますが、一方向通信で良いときは片方のTXと片方のRXだけを接続した単向通信も可能です。また、フロー制御を行うためCTSやRTSといった信号線を接続することもありますが、あまり一般的ではありません。
UARTのAはAsynchronousの頭文字で、クロックを使用しない非同期式という意味です。予め決めた速度でTXからビット列を送信し、その速度でRXから読み出してデータをやりとりします。クロック線に同期して信号をやりとりするものは、USART(Universal Synchronous Asynchronous Receiver/Transmitter)といいます。
UARTはデータはパケットに分割して送受信されます。パケットはスタートビット・データビット・パリティビット・ストップビットで構成されます。通信の開始と停止を示すのがスタートビットとストップビットです。データビットが実際に通信したい内容であり、5~9ビットが使用できますが7~8ビットが一般的です。パリティビットは通信内容に誤りがないか確認するためのビットです。データビットの長さ・パリティビットの詳細・ストップビットの長さは、通信速度とともに使用する機器同士で共有しておく必要があります。
UARTは1対多ではなく1対1の通信となるため、マイコン間での通信や、マイコンとパソコンとの通信・マイコンと通信モジュールとの通信に用いられることが多いです。通信が高速なSPIや電気的にやや不安定なI2Cが同じ基板内のデバイス同士での通信に使用されるのに対し、UARTは異なる機器同士での通信も可能であり、差動伝送に変換すればより長距離での通信が可能となります。
SPI(Serial Peripheral Interface)
SPIはSerial Peripheral Interfaceの略で、1対多でシリアル通信を行うプロトコルです。
一つのマスター(親機)がバス全体を制御します。チップセレクト(CS)・スレーブセレクト(SS)などと呼ばれる線を用いて通信相手となる子機を選択して通信します。デイジーチェーン接続も規格上可能ではありますが、あまり一般的ではありません。
信号線には、マスター出力/スレーブ入力のMOSI・マスター入力/スレーブ出力のMISO・クロックのSCLKがあります。MOSIとMISOが独立しているので送受信を同時に行う全二重通信です。マスターから選択されていないスレーブのMISOはハイインピーダンスとなるので影響を与えません。
SPIはクロックを用いた同期通信で、比較的高速な通信が可能です。クロックには、アイドル時にHにするかLにするかを指定する極性(CPOL)と、データのサンプリングを立ち上がりにするか立ち下がりにするかを指定する位相(CPHA)の設定があり、マスターとスレーブで一致させておく必要があります。
通信の開始・停止はCS(SS)で行うので通信するパケットに特にルールはないですが、8bitごとに通信するのが一般的です。
SPIは比較的高速に1対多の通信が行えるので、センサーなどの周辺機器とマイコンとの通信に利用されます。また、SDカードもSPI通信で使用することができます。
(2)マイコンのファームウェアのデバッグの方法
デバッグツールとしては、ICE、ROMエミュレータ、OCD、デバッグモニターがあります。MPUと差し替えて使用し、MPUがどう動作するかエミュレートするのがICE(In-Circuit Emulator)です。MPUごとにMPUよりも複雑なICEを開発する必要があるため非常に高価であり、今は主流ではありません。プログラムを動作させるMPUではなくプログラムを格納するROMを差し替えて動作中のROMの様子を調べるのがROMエミュレータです。マイコンにROMが内蔵されるようになったため、これも主流ではありません。現在一般的に使われているのはOCD(On-chip Debug)です。デバッグしたいマイコン自身がもつデバッグ用の機能を外部から利用するもので、JTAGやSWDといった規格が有名です。デバッグモニターはマイコンとPCなどを接続し、マイコンのソフトウェアからシリアル通信などで必要なデータを送信するものです。単純なLチカデバッグやprintfデバッグもデバッグモニターといえます。
OCDを使うと、プログラムを一つずつ実行したり、マイコン内部の様々な状態を取得したり、高度なデバッグができる。デバッグモニタではソフトウェアで書いた少ないデータしか読み取れませんが、簡単にデバッグができます。
このようなデバッグツールを使った上で、バグを洗い出し、さらにバグの原因を特定して修正する必要があります。バグの洗い出しでは、細かいモジュールごとにテストを繰り返して早期にバグを発見することが重要です。テストには、機能仕様に基づいたブラックボックステストや、プログラムの内部実装に基づいたホワイトボックステストがあります。
テストで見つけたバグの原因を特定するときは、プログラムが動作する理由をしっかり理解したうえで、その仕組みを小さな構成要素に切り分けて一つずつ調べていきます。切り分けた各部分について、デバッグツールを用いて想定通り動作しているか調べたり、条件を変えて調べたりして原因を特定し修正していきます。
(3)感電とその対策
交流の方が危険です。同じ電圧(実効値)のときは発生するジュール熱は同じなので火傷のリスクは同じになると考えられます。しかし、人間の筋肉は電気信号に従って動いていて、直流では筋肉が硬直するのに対し、交流では筋肉が痙攣します。交流で感電した場合は心室細動がおきる可能性があり致命的です。
感電対策として、電子機器を使うときは、漏電遮断機を使用すること、アースを接地すること、コンセントにカバーをすること、劣化した電子機器を使用しないこと、濡れた手で電子機器を触らないことに気をつけます。さらに、電子機器を作ったりメンテナンスしたりする場合には、絶縁工具を使用すること、保護具を着用すること、活線作業は原則として行わなわず、検電器で確認すること、電線は一本ずつ扱うこと、導体部を露出させないことに気をつけます。
(4)データシートの読み取り
入力電圧
5.2.3.1. Absolute Maximum RatingsのVoltage at IOはIOVDD + 0.5 Vとなっていて、IOVDDの上限は3.63Vであるため正常に動作しません。また、tolerantという単語でデータシート内を検索するとFault Tolerant Digitalという機能が見つかりますが、これは5V tolerantではありません。
SPI通信
4.4. SPIから分かるように、2系統のSPI通信がマスタースレーブどちらでも使用できます。
IOVDDとDVDDの違い
1.4.2. Pin Descriptionsにあるように、IOVDDはデジタル入出力ピンの電源であり、DVDDは内部のコアの電源です。Figure 2. A system overview of the RP2040 chipにおいて、IOsのみを駆動するのがIOVDDであり、USBやADCなどの例外を除いた内部回路を駆動するのがDVDDです。
SWDポート
SWDはSerial Wire Debugの略で、マイコンのデバッグができます。2.3.4. Debugにあるように、具体的には以下のことが可能です。
- 本来主記憶装置として使われる揮発性のSRAMや、外部のフラッシュメモリへのファームウェアの格納
- プロセッサの動作を手動で進めたり、動作状況を確認したりすること
- メモリやIOの状態の確認
出力電流
2.19.4. Padsからわかるように、1ポートからは最大12mAを出力できます。ただし、Table 621. Pin Typesからわかるようにデフォルトでは4mAで、Table 351. GPIO0,GPIO1,…,GPIO28,GPIO29 Registersのようにレジスタを書き換えることで設定を変更できます。
5.2.3.4. IO Electrical CharacteristicsのMaximum Total IOVDD currentから、合計で50mA出力できると分かります。なお、吐き出し(sorce)電流がIOVDD currentで吸い込み(sink)電流がVSS currentで、RP2040ではどちらも50mAで同じです。
(5)技術基準適合証明
無線通信に関係しないソフトウェアを変更することは問題ないですが、そのファームウェアが無線通信を担っている場合には違法となる可能性があります。技適のある無線ルーターのハードウェアを用いても、ソフトウェアによって無線通信の電波強度や周波数帯、送信休止時間などが変更できる場合は電波法で定められた基準に適合しなくなる可能性があるからです。この場合はハードウェアの改造と同じように扱われ、技適が無効となり違法となります。例えば、WiFiモジュールESP-WROOM-02はソフトウェアを書き換えることができますが、専用のライブラリやSDKを使っている限りでは無線通信の仕様には関係ない部分のソフトウェアを書くことになるため、認証には影響はありません。しかし、SDRに関わるソフトウェアを変更する場合には違法となる可能性があると考えられます。 (366字)