この度、セキュリティ・キャンプ2022全国大会の開発コース「X3 ハードウェア魔改造ゼミ」の選考通過の連絡を頂くことができたので、個人メモを兼ねて、伝統行事になっているらしい応募課題晒しをしておこうと思います。どなたかの参考になれば幸いです。
※回答の内容の正確性について筆者は一切保証しません。
#seccamp の X3(ハードウェア魔改造ゼミ)、通りました
— ゆみや (@stepney141) 2022年6月6日
対戦ありがとうございました&対戦よろしくお願いします
セキュリティ・キャンプとは
経済産業省の外郭団体・IPA(情報処理推進機構)及び一般社団法人セキュリティ・キャンプ協議会が主催している、若年IT人材の発掘・育成事業という名の無償勉強会です。 内容としては、暗号・Web技術・低レイヤ開発・ハードウェア解析などの多様な分野の中から希望するコースを選び、その分野の専門家から指導を受けつつ何かを学んだり実装したりするということをやるらしいです。
参加者は書類選考で決まります。参加希望者は興味のあるコースを最低1つ選んで、そのコースで扱う分野についてあらかじめ与えられている応募課題を提出します。この課題の出来が一定の水準を満たしていると書類選考通過となります。 2019年までは対面での合宿形式で開催されていましたが、2020年以降は新型コロナウイルスの流行を受けてオンライン開催が続いています。 合宿形式のセキュキャンを体験してみたいとも思いますが、多分オンラインにしかないメリットもあるのだろうと思います。
今年の応募に至るまで
個人的備忘録を兼ねて自分語りをします。個人ブログなのでポエムを書くのは許して下さい。
私が初めてセキュキャンのことを知ったのは2017年くらいのことだったらしいです。私がTwitter上で計算機オタクの人々と繋がるようになったのがちょうどその頃だったことを鑑みると、おそらくTLに参加者のツイートが流れてきたのを見て知ったのだと思います。
この頃からセキュキャンには興味を持っていましたが、純粋な実力不足・大学受験・中学時代から患っていた起立性調節障害による学業成績とメンタルの崩壊などにより、応募は叶いませんでした。
大学受かってセキュキャン行きたい
— ゆみや (@stepney141) 2019年4月16日
2020年:全国大会に応募する予定でいましたが、新型コロナウイルスの流行のためオンラインで開催されるとの報を受け「オフラインじゃないならいいかな...」と応募を見送りました。hsjoihsさんがCコンパイラゼミのチューターとして色々とツイートされていたのを自室からTweetDeckで眺めていた記憶があります。
2021年:年が明けても流行が収まる気配がなかったため、同年のオンライン全国大会への応募を決めました。興味のあるコースは複数あったものの、当時Web開発にのめり込んでいたこともあって、プロダクトセキュリティトラック「B1 ちいさなWebブラウザを作ってみよう」を志望。しかし課題の重さに心が半分折れ、固有スキル「精神的プレッシャーによるタスクの後回し: A+」が発動してしまう事態に発展しました。結局、回答提出期限の1週間前になるまでまともに課題をする気が起こらず、ズタボロの内容の回答を提出することになり、あえなく落ちました。まあ「クイズの正答を探すのではなく、自分の頭で思考した内容を記述する」という能力そのものが当時の自分には完全に欠けていたので、まともに準備をしていたとしてもまず落ちていただろうと思いますが...。
セキュキャン2021、普通にダメでした
— ゆみや (@stepney141) 2021年6月10日
通った皆さんおめでとうございます
2022年:昨年の反省を踏まえ、応募の準備をいち早く開始しました。まず、クラス一覧を見ていて惹かれたものを以下の通りピックアップしました。
今年は講師陣によるTwitter上での宣伝の勢いが凄く、倍率も一昨年・昨年に比べて相当上がることが予想されたため(実際、一昨年・昨年と違って今年は応募締切が延長されませんでした)、かなり力を入れて回答を書かないと通れなさそうだなという直感がありました。そのため当初は、単願ではなく「選考通過の可能性を増やすため、興味のある複数のコースに数を撃つ」という戦略を取ろうと思っていました。 可能であればピックアップしたもの全てに応募をしたかったのですが、開発コースと専門コースの併願は不可能であったためBトラックへの応募は見送り、さらに併願数の上限は3個であったため、最も興味があったX3・L3・Y4に応募しました。
しかし、いざ回答を書き始めてみると(当然ですが)課題がどれも重かったことにまたもや悩まされました。回答期限まであと2週間を切ろうかという頃に後回しスキルの発動の兆候を自覚したため、ここで方針を大きく変え、「精神的負荷を減らして1つの課題に集中するため、併願をやめる」という戦略を取ることにしました。単願するコースとして、以下の理由からX3を選びました(特に2.と3.が大きかったです)。
- 回答が書きやすそう
- セキュキャン以外で同じことが出来る機会がなさそう
- X3講師の puhitakuさん (末田さん) が手掛けていらした電子辞書ハックに以前から興味があった
※私は以前から関数電卓のハック界隈におり、puhitakuさんの電子辞書ハックのプロジェクトをTwitter上でたまたま拝見した時からずっと氏の活動が気になっていました。
結果的に考えると、この方針転換がより良い回答を作るために効果的だったように思います(回答提出期限当日に食事会があり、中華料理店で紹興酒を飲んで適度に筆が乗った状態で回答を仕上げることになったのですが、もしかするとこれが効いた可能性もあります)。
授業をフル単しているので平日はあまり回答を書く時間を取れず、主に放課後と休日に図書館に籠もって一気に回答を仕上げる形を取りました。
ともあれ、貴重な機会を無駄にしないようこれから精進していきます。
回答の方針
回答作成を通じてかなり有意義な思考訓練ができた気がするので、備忘録として回答を書く上で注意したことを書いておきます。どれもかなり自明なことなのでわざわざ書くのも恥ずかしい気がしますが、個人ブログなので当たり前のことを書くのも許して下さい。
- 以前から「セキュキャンの課題は加点式なので、少しでも多く思考の過程を書くべき」「正答があるクイズに答える感覚でやらずに、深堀りして丁寧に調査・思考するようにすべき」と聞いていたので、これを基本方針として回答をまとめました。とにかく全ての設問に回答することを考えました。
- 思考の過程を極力丁寧に書くようにしました。問われていることを調べていくうちに「なんだこれ? 初めて聞いたな、よう分からんな」と思ったワードがあれば、それが回答を直接求められているわけではない概念であっても、そのワードについて得た理解を併記するようにしました。
- セキュキャンの応募課題は「このコースではこういう感じの話をやるから予習してきてね」という趣旨だと聞いたことがあったので、「設問に回答する」というよりも「自分がその分野について勉強したことをガイドラインに沿ってまとめる」というようにすることを意識しました。
- 課題で問われた内容が今までやったことのない完全初見の分野ばかりだったため、これを強く意識しないと自分にはそもそも何も書けなかったという事情もありました。
- 学科のゼミで実感したことですが、自分でもよく分かっていないことを他人にちゃんと説明することはできないので、可能な限り多数の参考文献を参照して勉強するようにしました。
セキュキャン応募課題を仕上げようとしている最中なんだけど、この営み何かに似ていると思ったらゼミ発表だ
— ゆみや (@stepney141) 2022年5月23日
設問
設問の内容をここに引用しておきます(原文:https://www.ipa.go.jp/files/000097409.txt)。
(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問
オームの法則
「回路に加わる電圧Vは、回路を流れる電流Iに比例する」という関係のことで、Rを回路中の抵抗として「V=RI」という式で表される。これを「I=V/R」の形に変形すると、「電流の流れにくさは電流の大きさに反比例する」という関係が読み取れる。つまり、回路中の電気抵抗が小さければ、回路に過大な電流が流れることがオームの法則から導かれる。大電流は回路の発熱・発火の原因になる上、回路に組み込むLEDなどの電子部品は正常に動作する電流の定格が定められているので、その値を超えた電流を流すと回路が破損する恐れがある。このため、回路には必ず適切な大きさの抵抗を組み込み、電流の大きさを制限する。この時に回路に組み込む抵抗の「適切な大きさ」そのものも、オームの法則を使って計算される。オームの法則は電子回路設計におけるもっとも基本的な法則である。
参考文献:
- 『学びやすいアナログ電子回路(第2版)』二宮保・小浜輝彦, 森北出版, 2021
- 『Make: Elecrtonics 第2版』Charles Platt, O'Reilly Japan, 2020
UART
Universal Asynchronous Receiver Transmitterの略で、調歩同期方式のシリアル通信とパラレル通信の相互変換を行う集積回路のこと。情報を構成するビットを送受信する時、単一の信号線上に1ビットずつ逐次的に送受信する方式がシリアル通信で、複数の信号線上に複数のビットを並列して送受信する方式がパラレル通信である。調歩同期方式とは、送信する機器・受信する機器で共通のクロック信号を共有せず、送信側が「これからデータを送る」「これでデータを送り終えた」という信号を実際のデータの間に送信し、送信側・受信側同士で歩調を合わせながら通信を行う方式のことである。
UARTの用途としてはCPUと外部周辺機器を繋ぐためのインターフェースとして使われることが多く、かつてはパソコンとモデム等の周辺機器を接続するためにも広く使われていた。しかし、通信速度が比較的遅いことから、センサーのような高速なデータの送受信が求められる機器には向かない上に、接続されている周辺機器の情報を取得する方法がないため、現在はパソコンの外部接続用途でもあまり使われなくなっている。一方で、仕組みがシンプルであるため開発工数が少なく済むという利点があり、現在は組み込みシステム・マイクロコントローラで活用されることが多い。
最も単純なUARTの入出力線は、CPU等に接続するためのパラレルバスと、他のUARTに接続するためのTX(送信)・RX(受信)の2本の信号線から成る。TX(Transmit Data)の信号は出力信号で、他のUARTに、調歩同期方式のシリアル通信でデータを送信する。RX(Receive Data)の信号は入力信号で、他のUARTから、調歩同期方式のシリアル通信でデータを受信する。CPUからUARTにデータが送信されると、パラレルバスから8~16bitの幅で複数の信号がUARTに送られてくる。するとUARTはこの複数のデータ信号を1本のデータ信号に変換し、シリアル信号として送信(TX)する。逆にUARTがシリアル信号を受信(RX)すると、複数のデータ信号になるまでデータを溜め、パラレル形式にデータを変換してパラレルバスでCPUに信号を送信する。2つのUART間で通信を行う場合、一方のUARTのTXをもう一方のUARTのRXに、一方のUARTのRXをもう一方のUARTのTXに、それぞれ接続する。この時、両方のUARTのボーレート(情報を転送する速度のこと)の値を同一に揃えておく必要がある。なぜなら、送信側・受信側は互いにクロック信号を共有しないので、お互いが同一の速度で送受信しなければ同じタイミングで通信を行えないためである。
参考文献:
- 『マイクロコンピュータ入門 高性能な8ビットPICマイコンのC言語によるプログラミング』モニシャガ=ワシリー・森元逞・橋本浩二, 共立出版, 2022
- 『組込みエンジニアの教科書』渡辺登・牧野進二, C&R研究所, 2019
- https://wa3.i-3-i.info/word12982.html
- https://www.analog.com/jp/analog-dialogue/articles/uart-a-hardware-communication-protocol.html
- https://www.rohde-schwarz.com/jp/products/test-and-measurement/oscilloscopes/educational-content/understanding-uart_254524.html
- https://synapse.kyoto/glossary/uart/page001.html
- https://xtech.nikkei.com/it/pc/article/NPC/20070517/271422/
- https://emb.macnica.co.jp/articles/8191/
SPI(Serial Peripheral Interface)
同期的なシリアル通信インターフェースの一つ。SPIで通信するデバイスはマスタ(主)とスレーブ(従)に分かれて通信を行い、クロック信号によってマスタとスレーブが同期してデータ通信を行う。クロック信号を生成する方がマスタと呼ばれ、1つのマスタデバイスに複数個のスレーブデバイスを接続することが出来る。ただし、マスタは同時に1つのスレーブとしか通信できない。通信の制御はマスタが行い、マスタがスレーブに送信する場合でも、スレーブがマスタに送信する場合でも、常に通信はマスタが開始する。一般的な4線式のSPIでは、SCLK(Serial CLocK)・MISO(Master In Slave Out)・MOSI(Master Out Slave In)・SS(Slave Select)という4本の信号線で構成されている。マスタで生成されたクロック信号はSCLKを通じてスレーブに送信される。MOSIとMISOはデータを送受信するための信号線であり、MOSIは、マスタからスレーブに対するデータの送信に、MISOはスレーブからマスタにデータを送信するために用いられる。SSはマスタが通信するスレーブを選択するために用いられる。用途としては、主にマイコンと周辺デバイス、またはCPU同士の接続が挙げられる。特に、高速でなおかつ複数のデバイスと通信できるという特徴から、高速な通信が必要なAD/DAコンバータやSDカードのようなストレージデバイスとの接続に用いられることが多い。
参考文献:
- 『マイクロコンピュータ入門 高性能な8ビットPICマイコンのC言語によるプログラミング』モニシャガ=ワシリー・森元逞・橋本浩二, 共立出版, 2022
- 『組込みエンジニアの教科書』渡辺登・牧野進二, C&R研究所, 2019
- 『電子工作ハンドブック』I/O編集部, 工学社, 2014
- 『Raspberry PiによるIoTシステム開発実習』永田武, 森北出版, 2020
- https://synapse.kyoto/glossary/spi/page001.html
- https://www.diatrend.com/glossary/knowledge_communication.htm
- https://emb.macnica.co.jp/articles/8191/
- https://www.analog.com/jp/analog-dialogue/articles/introduction-to-spi-interface.html
- https://learn.sparkfun.com/tutorials/serial-peripheral-interface-spi/all
- https://manual.atmark-techno.com/armadillo-guide-std/armadillo-guide-std-hardware-expansion_ja-1.0.0/ch06.html
所感
これは「このコースではこういう用語が絡む分野をやるので、予習も兼ねて意味を調べてこい」という趣旨の設問だと解釈しました。オームの法則は馴染みがありましたが、SPIについてはおぼろげに聞いたことしかなく、UARTに至っては完全に初めて聞いた言葉でした。とりあえずGoogle検索したところマイコン絡みの言葉らしいことが分かったので、Web上の様々な資料を閲覧するのはもちろん、図書館で電子工作・組み込み開発・マイコンの本を漁って回答をまとめました。
第2問
まず、ファームウェアという概念と、マイコンのファームウェアのデバッグの特殊性について確認する。 特に組み込みシステムの世界において、CPUで動作するプログラムは、一般的な用語である「ソフトウェア」とは区別して「ファームウェア」と呼ばれる。パソコンのような汎用システムにおいては、アプリケーションプログラムは外部ストレージなどからRAMに読み込まれる。これは、プログラムにバグがあったり仕様が変更されたりした際、読み込むデータを変更すればシステムの機能を変更することができるという仕組みで、このような柔軟な対応が可能なアプリケーションが「ソフトウェア」と呼ばれる。これに対し、マイコンなどを用いた組み込みシステムにおいては、バグによる製品の不具合が起きた時にユーザーの手元の機器のアプリケーションを書き換えるのは膨大なコストとなる。このことから、マイコンなどの組み込み環境で動作するプログラムは、一度書き込むと変更が効きにくい「固いソフトウェア」、つまり「ファームウェア」と呼ばれる。特に商用製品のファームウェア開発の場面では「バグのない完成されたシステム」が要求されるため、徹底したデバッグが重要とされる。
マイコンのファームウェアの開発では、汎用のコンピュータシステムのように同じハードウェア上でプログラムの開発・デバッグを行うことが難しい。つまり、開発環境と実行環境が異なるということになるが、このような開発形態をクロス開発と呼ぶ。 クロス開発におけるデバッグでは、ホスト環境(開発を行うパソコン側)で動くデバッグツールから、ターゲットシステム(実際に動作するマイコン側)にプログラムを送り込み、ターゲット上での実行状況をホストから指示・監視する。このようなデバッグの仕方をリモートデバッグと言う。リモートデバッグを行うためにはホストとターゲットの間の通信手段が必要であり、イーサネット・シリアル通信・パラレル通信などのインターフェースが用いられる。なお、実行環境によってはターゲット側にこのような通信手段がない場合や、あったとしても本来の用途のために既に使われている場合など、通信手段をデバッグに使えない場合があり、この場合は自前の通信手段を持つデバッグツールや、プロセッサのデバッグ機能を利用できるデバッグツールを利用する必要がある。
具体的なデバッグ手段の例として、以下が挙げられる。
- 専用のデバッグ手法・通信手段を用いず、汎用的な手段でプログラムの動作状況を外部に出力させる。例えば「動作状況に応じてLEDランプを点滅させる」「printfなどでログを生成させ、UART・SPIなどの通信インターフェースを介してログ文字列を出力させる」といったものが考えられる。先述の通り、ターゲット側にこのような出力手段がない場合や、あってもデバッグ用にそのリソースを回せる余裕がない場合などには使えない方法である。
- オシロスコープやロジックアナライザと言った機器を用いて信号の波形・電圧などの変化を計測し、プログラムへの入力や制御した結果の出力を確認する。
- 開発環境上でソースコードの静的解析を行い、ターゲット側で実行するより前の段階でプログラムの誤りの有無を検証する。
- デバッグモニタというプログラムを利用する。これはターゲット側に常駐させて動かす小さなプログラムで、シリアル通信などの手段でホスト側と通信し、ホスト側から受け取ったコマンドに従って、ターゲット側の状態を取得・変更してデバッグを行う仕組みである。
- ICE(In-Circuit Emulator)と呼ばれる、システムの状態を取得・変更するための機器をターゲット側に設置する。ICEによるデバッグには主に次の2種類がある。
- フルICE:ICEと呼ばれる、ターゲット側のCPUをエミュレーションする装置を用いる。ICE機器をホスト側とターゲット側の間に接続し、ICE機器をターゲット側のCPUの代わりとしてターゲットを動作させることによってデバッグを行う。ICEをプロセッサの種類ごとに開発しなくてはならないためコストが高くなるなどの欠点がある。
- ROM ICE:フルICEにおいて、ターゲット側のCPUの動作を真似るのではなく「メモリの動作を真似て、メモリアクセス情報の取得・変更を行う」機器を利用するデバッグ方式。
- JTAG ICE:JTAG ICEと呼ばれる機器をホスト側とターゲット側の間に接続し、ターゲット側のCPUが持っているオンチップデバッガと呼ばれるデバッグ機能を、JTAG ICE機器を介する形でホスト側から利用する(この時、ターゲット側の接続にはJTAGというインターフェースを利用する)。原理上、オンチップデバッガを搭載していないプロセッサではこの方法は使えない。
参考文献:
- 『よくわかる組み込みシステムのできるまで』長嶋洋一, 日刊工業新聞社, 2005
- 『組込みシステム概論』戸川望, CQ出版, 2008
- 『わかりやすい組込みシステム構築技法 ソフトウェア編』永井正武・澤田勉, 共立出版, 2006
- 『組込みエンジニアの教科書』渡辺登・牧野進二, C&R研究所, 2019
- https://www.cqpub.co.jp/interface/sample/200511/if0511_chap1.pdf
- https://www.osaphex.com/2018/11/23/%E3%83%9E%E3%82%A4%E3%82%B3%E3%83%B3%E3%81%B8%E3%81%AE%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0%E3%81%AE%E6%9B%B8%E3%81%8D%E8%BE%BC%E3%81%BF%E3%81%AE%E4%BB%95%E7%B5%84%E3%81%BF%EF%BC%88jtag-swd/
- https://monoist.itmedia.co.jp/mn/articles/0703/26/news101.html
- https://www.fsi-embedded.jp/kumico/column/3366/
- https://edn.itmedia.co.jp/edn/articles/0703/01/news133.html
- https://qiita.com/7of9/items/ecdac553a7d325f11870
所感
これも「こういうことをやるから予習してこい」という趣旨のようです。回答に一番苦労した設問でした。
まず「ファームウェア」という語彙はもちろん知っていたものの、冷静に考えると一般的なOSやアプリケーションと何が違うのかまるで分からない。なんとなくレイヤー低めな感じの概念だという知識はあったので、図書館で組み込み系の本を漁り、その中から「ファームウェアとは何か」「ファームウェアのデバッグは高いレイヤーでのデバッグと何が違うのか」に関連しそうな話を集中的に探してまとめ、回答の文章をどう構成すべきかという筋道を立てました。具体的なデバッグ手法を調べたのは一番最後の段階です。
第3問
直流と交流のどちらが危険か:
- まず感電した際に人体への悪影響が出る理由として「電流が脳のシナプスの電気信号を乱すから」「人体は電気抵抗を持っているので、電流が流れる際にジュール熱が発生し、それが原因で内臓や細胞組織が火傷・焼損するから」「心臓に電流が流れると、心筋の規則的な収縮のリズムが崩れ、血液が適切な量・適切な周期で全身に送られなくなるから(不整脈)」といったものが考えられる。
- 次に、直流と交流の違いを考える。直流は一定の電圧で一定の電流が一定の向きに流れる。それに対して、交流の場合は電流の流れる方向と電圧が一定の周期で変化する。このことから、交流電流は直流電流と比較して人体のより広い範囲に電流が拡散して流れると考えられる。
- ここで1.と2.で考えたことを総合する。直流電流は一定の方向に流れるので、感電しても必ずしも心臓に直撃するとは限らないし、電流が流れる範囲が限られるため火傷する範囲もそこまで広くはないはずである。それに対して、交流電流は流れる方向が絶えず入れ替わるため、直流よりも人体の中のより広い範囲を流れると考えられる。すると、交流の方が火傷する範囲も広く、心臓を電流が通過するリスクも高いはずである。
- 以上の推論から、直流よりも交流の方が感電した際に危険であると考えられる。
感電しないための工夫:
- 「感電すると人体に何が起こりうるか」を把握する。感電するとどのような怪我を負ったりどのような死に方をする可能性があるのかを知っていれば、自分から積極的に感電をしようという動機は薄れ、感電するリスクを回避するような行動をするはずである。
- 高電位の場所を濡れた手・濡れた身体で触らない。濡れていると人体の抵抗は小さくなり、オームの法則より、同じ電位でも抵抗が小さいほど流れる電流はより大きくなる。
- 確実にアース(接地)を行う。アースをすることで、漏電しても電流が人体を通過することを防ぐ。この時、アース線が導電体に接続されないよう注意する。
- 電気を扱う際は、ゴムなどの絶縁体でできた手袋をはめ、電流が直接体に流れないよう肌の露出を抑える。
- 漏電遮断器を設置する。漏電遮断器は、正規の電気回路の外に電気が漏れ出たことを感知して回路を遮断する装置である。これによって、漏電による感電が起こったとしても、感電の時間をごく短い間に留めることができる。
- 確実に絶縁を行い、電流が流れる部位が直接露出しないようにする。例えば、配線は絶縁体の素材で被覆されたものを使うべきであり、また導線の端子部分が露出しないように注意しなければならない。
- 分解の途中で電子回路に直接触らないように注意する。特に大電流が流れている機器の場合、分解の際に感電による重傷を負う恐れがある。
参考文献:
- https://www.msdmanuals.com/ja-jp/%E3%83%9B%E3%83%BC%E3%83%A0/25-%E5%A4%96%E5%82%B7%E3%81%A8%E4%B8%AD%E6%AF%92/%E6%84%9F%E9%9B%BB%E3%82%84%E8%90%BD%E9%9B%B7%E3%81%AB%E3%82%88%E3%82%8B%E5%A4%96%E5%82%B7/%E6%84%9F%E9%9B%BB%E3%81%AB%E3%82%88%E3%82%8B%E5%A4%96%E5%82%B7
- https://www.msdmanuals.com/ja-jp/%E3%83%97%E3%83%AD%E3%83%95%E3%82%A7%E3%83%83%E3%82%B7%E3%83%A7%E3%83%8A%E3%83%AB/22-%E5%A4%96%E5%82%B7%E3%81%A8%E4%B8%AD%E6%AF%92/%E9%9B%BB%E6%92%83%E5%82%B7%E3%81%8A%E3%82%88%E3%81%B3%E9%9B%B7%E6%92%83%E5%82%B7/%E9%9B%BB%E6%92%83%E5%82%B7
- 『やさしく学ぶ電気安全NOW』1993, 小原幸雄, オーム社
所感
電子工作をやる訳ですから感電について知っておくことは当然必要ですよね。MSDマニュアルの議論を参考にして推論の筋道を立てました。 回答締切後になって、交流の方が危険な背景として細胞膜のイオンチャネルが関係しているらしいという話も聞きました。生物学に明るい方はその方面で回答をまとめてみるのもアリなのではないでしょうか。
第4問
GPIOに5.0Vを入力しようと思います。この機器は正常に動作しますか?
正常に動作しない。rp2040-datasheet.pdf p.638 の Table 632 にデジタルIOピンの入力電圧の最大値の記述があり、それには「Input Voltage High IOVDD+0.3」と記載されている。ここでIOVDDとはデジタルGPIO用電源で、その絶対最大定格は同じページの Table 629 に「3.63V」であると書かれている。したがって、入力電圧の最大値は高々3.93Vであるので、5.0Vの入力電圧では正常に動作しないと考えられる。しかも、5.0Vは電源電圧よりも高い電位なので、この電圧をGPIOに入力するとポートから電源に電流が流れ、マイコンを破壊してしまう可能性すらある。
この機器でSPI通信は使用できますか?
使用できる。rp2040-product-brief.pdf の p.3 に "2 × SPI controllers" との記述があり、SPIコントローラが搭載されていることが分かる。
IOVDDとDVDDの違いを説明してください
IOVDDはデジタルGPIO用電源のピンであり、公称電圧は1.8V~3.3Vとなっている。DVDDは公称電圧1.1Vのデジタルコア電源で、VREG_VOUT(内蔵コア電圧レギュレータ用電源出力のピン)などの電源に接続することができる。
SWDポートを使うと何ができますか?
SWDとは、Serial Wire Debugの略で、2本の信号線を用いてICの内部回路と通信を行うための汎用的なインタフェースである。ここにケーブルを接続することでプロセッサのリモートデバッグを行うことが出来る(出典: rp2040-product-brief.pdf p.4, rp2040-datasheet.pdf p.11)。 SWDポートを用いたデバッグ方法の詳細については、rp2040-datasheet.pdf の p.61 "2.2.3.4. Debug" 節に詳しい記載がある。それによると、このSWDポートは以下のような機能を提供している:
- ファームウェアをSRAMやフラッシュメモリにロードする
- プロセッサの動作をコントロールし、実行・一時停止・ブレークポイントの設定を始めとするARMコアのデバッグ機能を操作する
- プロセッサのArchitectural state(≒レジスタ)にアクセスする
- システムバスを経由して、メモリやメモリマップドI/Oにアクセスする
GPIO 1ポートから標準で何mA出力できますか?またGPIO合計で最大何mAまでの電流を出力できますか?(ただしQSPIポートで使用する電流は考慮しないものとします)
rp2040-datasheet.pdf の p.641 に "the sum of all the IO currents being sourced (i.e. when outputs are being driven high) from the IOVDD bank (essentially the GPIO and QSPI pins), must not exceed IIOVDD_MAX." という記述があり、GPIOポートとQSPIポートから供給される全てのIO電流の合計が、IIOVDD_MAX (=50mA, p.639 の table 632 に記載) を超えてはならないことが分かる。しかし、QSPIポートを考慮しないGPIOの最大および標準の出力電流は、データシートのどこから読み取ればよいのか特定することが出来なかった。
参考文献
- 『Make: Elecrtonics 第2版』Charles Platt, O'Reilly Japan, 2020
- http://www.tokudenkairo.co.jp/jtag/adv2018/08.php
- https://deviceplus.jp/raspberrypi/raspberrypi-gpio/
- https://www.analog.com/jp/analog-dialogue/raqs/raq-issue-50.html
所感
これも「こういうマイコン使うから仕様確認してね」「データシートの見方は大丈夫かな?」という感じっぽいですね。GPIOの仕様を読み解くのにだいぶ苦労しました。出力電流についてはデータシートを見ているうちにこんがらがってしまったので、その時点で把握できたことを書きました。
第5問
証明の名前について
解答
技術基準適合証明
考えたこと
まず電波法の条文を見て、電波法の総則で定義を確認した上で、電波を発射する装置に関する証明についての記述を探した。
- 電波法第二条によると、
- 「電波」とは、三百万メガヘルツ以下の周波数の電磁波を指す。
- 電波を送受信するための電気的設備を「無線設備」という。
- 無線設備及び無線設備の操作を行う者の総体を「無線局」という。ただし、受信のみを目的とするものを含まない。
- 同法第四条によると、無線局を開設しようとする者は、4つの例外を除き、総務大臣の免許を受けなければならない。
- 同法第三章は無線設備が満たさなくてはならない技術基準を定めている。
- 同法第三十八条の二の二によると、小規模な無線局に使用するための無線設備であって総務省令で定めるものを「特定無線設備」という。
- 同法第三十八条の二の二によると、同法第三章の基準に適合している無線設備には「技術基準適合証明」という証明が与えられる。
つまり、電波を発射するための装置を利用するには、原則として総務大臣から免許を交付される必要があること、無線装置は電波法に規定されている技術基準を満たしていなければならないこと、技術基準を満たしている無線装置にはその証明が与えられることがわかる。
電波法の規定では、次の場合に当てはまる無線機器には、それを示す適合表示を付与する必要がある。
- 登録証明機関又は承認証明機関が技術基準適合証明をした場合
- 登録証明機関又は承認証明機関により工事設計認証を受けた者がその認証に係る工事設計に基づく無線設備について検査等の義務を履行した場合
- 技術基準適合自己確認をし、総務大臣に所要自己を届け出た製造業者又は輸入業者が、届出工事設計に基づく無線設備について検査等の義務を履行した場合
ここで、問題文の指示は「電波を発射する装置を日本国内で合法的に使用する」ために必要な無線機に与えられる「電波を発射する電波法で定められた基準に適合しているという証明」の名前を答える、ということであった。 上で見た「技術基準適合証明」の電波法上の定義は、問題文で与えられた「証明」と内容が一致するので、答えるべき「証明」とは「技術基準適合証明」のことであると考えられる。
参考文献:
- https://elaws.e-gov.go.jp/document?lawid=325AC0000000131
- https://elaws.e-gov.go.jp/document?lawid=325M50080000014
- https://www.tele.soumu.go.jp/j/adm/monitoring/summary/qa/giteki_mark/index.htm
- https://www.tele.soumu.go.jp/j/sys/equ/tech/
- https://www.dsk.or.jp/dskwiki/index.php?%E9%81%A9%E5%90%88%E8%A1%A8%E7%A4%BA%E7%84%A1%E7%B7%9A%E8%A8%AD%E5%82%99
- https://www.ieice.org/~cs-edit/magazine/ieice/alldata/Bplus31_all.pdf
非純正ファームウェアで証明が無効になる理由について
無線ルータなどの特定無線設備の技術基準適合証明を受けるためには、登録証明機関又は承認証明機関の検証を受けるか、製造業者・輸入業者自らが検証して技術基準適合自己確認を行い総務大臣に届け出る必要がある。だが、証明を受けるための検証の際には純正ファームウェアのみで試験を行うと考えられる。つまり、非純正ファームウェアを導入した特定無線設備は技術基準適合証明の検証環境と異なるため、電波法の技術基準を満たさない恐れがある。したがって、非純正ファームウェアでは技術基準適合証明が無効になる恐れがある。(245文字)
所感
設問を見た時点でまあ技適のことを言ってるんだろうなということは分かるので、電波法の条文を読んで「なぜ技適だと言えるのか」を裏付けるという方針で考えました。条文の読み方については、学科の選択科目で取っていた法律学入門の授業の経験が役に立ちました。