CPUの中に小さなCPUが入っていたり、IC内にCPUが入ってるのなに?

たとえば、TIのCC1310というCPUがあります。

http://www.tij.co.jp/product/jp/CC1310

このページのなかにブロック図がありますが、この中に「Cortex M3」と「Cortex M0」という二つのCPUが見えます。

 

「なるほど、デュアルコアCPUなのかな?」

 

そういう風に言うこともできるかもしれませんが、開発者からすると扱えるのは「Cortex M3」だけです。

Cortex M3の横には「Flash」と書いてあるのに、Cortex M0の横には「ROM」と書いてあります。

つまり、開発者はM3のプログラムを作って書き換えることはできるのですが、M0のプログラムは書き換えることが出来ません。

 

「じゃあ、M0はなんのためにあるの?」

 

普通はそう思います。

実はこれ、無線部の制御をしている裏のCPUなのです。

M3から無線部に「電波を出せ!」とか言うと、M0がそのメッセージを受け取って実際に無線を出力しているわけです。

言ってしまえば、M0は「ただの制御回路」として動いています。

無線の制御をする専門の回路を組んでもいいのですが、メーカとしてはそれは大変だったのでしょう。

専門の回路の代わりに小さなCPUを組み込んでそこにメーカがプログラムを書き込んで、制御回路の代わりをさせているわけです。

 

このパターン、最初見ると混乱しますが、じつはちょくちょくあります。

例えば、NXPというメーカのRFID(非接触カード)の読み書きを行うICなども、外から見るとただのICなのに中には小さなCPUが入っていたりします。

こんな風に、制御回路の代わりにCPUが入っている部品はちょくちょくあるのです。

最初に見ると驚くと同時に「自分でプログラムを書き換えられるのかな」と思ってしまうものですが、そういう性質のものではありません。

 

以上、小田切でした。

基板開発でよく使う測定機器

そういえば、測定機器について紹介していなかったので、軽く列挙してみようと思います。

 

◯テスター

ご存知のテスター。

電圧を測ったり抵抗値を測ったり、安くてもマルチに活躍する大事な商売道具です。

 

◯LCRメーター

コンデンサの容量やインダクタの値を測定することができる機器です。

テスターの高機能版。

 

◯安定化電源

自由に電圧・電流を設定して出力ができる電源です。

「この基板の入力電圧は5V±5%だ」というときに、4.75Vと5.25Vでテストをしないといけませんが、安定化電源ならそういった中途半端な電圧も出力できます。

 

◯オシロスコープ

信号の波形を見ることができる機材です。(横軸時間、縦軸電圧)

DCDCコンバータの出力波形や通信の信号波形をみるのに使います。

帯域100MHz程度のものなら数万円でもあるほど安いですが、それ以上の周波数になるといきなりお値段上がります。

 

◯スペクトラムアナライザー

信号の周波数分布を見ることができる機材です。(横軸周波数、縦軸パワー)

無線出力など数百MHz~数GHzなのでオシロスコープでは捉えられないので、スペクトラムアナライザーで確認します。

百万円以上するのが普通です。

 

◯シグナルジェネレータ

任意の波形を出力することができる機器です。

スペクトラムアナライザーとセットで使うことが多いです。

 

◯ネットワークアナライザー

アンテナやアンテナのマッチング回路でよく使用する機材です。

「この回路に100MHzの信号を入れた時、外から(x+yj)Ωに見えるか」といった回路の実際の複素インピーダンスを測ることができます。

百万とか一千万レベルの機材です。

 

◯恒温槽

指定した温度・湿度を保ってくれる冷蔵庫みたいな装置です。

高温・低温で動作試験をする際に使用します。

 

◯静電気試験機

静電気を出すガンで、製品に静電気を打って耐性を調べる時に使います。

 

メジャーなところだとこんなところでしょうか。

気になるものがあったらぐぐってみると知識が広がりますよー。

 

以上、小田切でした。

デジタル入力になまった波形を入れては駄目!

デジタル信号は3.3V系なら、約3.3Vと約0VでHighとLowを表現します。

ところがよく考えてみてほしいのですが、High→LowまたはLow→Highの変化の時に1Vとか2Vに一瞬なりますよね。

これって問題ないのでしょうか。

 

実は問題が有ります。

あるCPUの例では、LOW入力は0.3VCC=約1V以下、HIGH入力は0.7VCC=約2.3V以上と規定されています。

ということは、1V~2.3Vの間ではHIGHかLOWかはわからないということです。

この部分を「中間電位」と呼びます。

この中間電位ではデジタル回路は不安定になります。

しかし電圧の変化時に絶対に通過するのでゼロにするわけには行かないので、CPUなどのICの側で「x us以内に信号を変化させること」と規定されています。

これを守らないで、例えばRC回路などでゆっくり変化する信号をデジタル入力に入れるとどうなるでしょうか。

 

1,チャタリングする

中間の電圧の認識というのは非常に不安定です。

入力電圧が微妙にふらついていたりすると、HIGHかLOWの検出がブレたりします。

入力信号:0V→ふらふらしながら上昇→3.3V

出力理想:LOW→HIGH

出力現実:LOW→HIGH→LOW→HIGH……→最終的にHIGH

こんな風にぐちゃぐちゃな信号として読まれてしまいます。

 

2,貫通電流(大電流)が流れる

デジタル入力回路というのは、中間電圧をそもそも想定していません。

構造上、中間電位が入ると内部で「貫通電流」という大電流が流れてしまいます。

ICで規定された時間以内に信号が変化すれば問題はないのですが、ゆっくり信号が変化するとこの貫通電流が長時間流れてしまい、部品の破壊につながります。

 

と、こんなわけなのでゆっくりと変化する信号をデジタル回路やCPUのデジタル入力につっこんではいけません。

「シュミットトリガ入力」だとか「ヒステリシス入力」などと書いてあるIC・CPUは問題ありませんので、そういった部品を使うようにしましょう。

 

以上、小田切でした。

CPUに取り付けた水晶振動子が発振しない時

実際に仕事であったことなんですが、CPUに取り付けている水晶振動子が発振しません。

たしかにマッチング前なので水晶振動子についているコンデンサの容量などは最適ではありません。

しかし、全く動かないというのも奇妙です。

不安定でも不安定なりに動きそうなものですが、うんともすんともいいません。

 

1,電源は正常

2,CPUはこわれていない

3,CPUのリセットはきちんと解除されている

 

これで水晶振動子が発振しないという状況で、原因が特定できたらなかなか凄い!

 

しばらく考えてみましょう

 

・・・

 

・・・

 

・・・

 

・・・

 

・・・

 

ここで大ヒントです。

 

「水晶振動子が動いていないのにプログラムは動いている」

 

これでわかりませんか?

 

・・・

 

・・・

 

・・・

 

・・・

 

はい、タイムアップ。

 

プログラムが動いているということは、なにかクロックが存在しているということです。

しかし、クロック源として回路設計で取り付けた水晶振動子は動いていない。

となると、クロック源は「内蔵発振器」ということになります。

 

そう、最近のCPUは精度はいまいちなものの単体で動作する内蔵発振器がついています。

水晶振動子がなくても動作しちゃうんです。

そして、たいてい内蔵発振器があるCPUはデフォルトで内蔵発振器を使うようになっています。

つまり、ソフトウェアで適切に設定をしないと、外部の水晶振動子を活用してくれないのです。

 

ということで、正解は「内蔵発振器で動いてしまっている」でした。

水晶振動子がうんともすんとも言わないときはこれを疑ってみましょう。

 

以上、小田切でした。

DMAってなんだろう?

CPU・MPUのブロック図やデータシートには必ず「DMA」というものが出てきます。

DMA = Direct Memory Access

直截メモリにアクセス!ってことです。

 

普通、メモリというのはCPUが触ります。

プログラムでメモリにデータを書き込んだり、読み込んだりします。

プログラムを実行するだけの機械ならこれでOKです。

 

が、現実のマイコンというのはいろんなことをしています。

例えば、Aと通信をしながらBとの通信に必要なデータを組み立てている場合を考えてください。

Bの通信に必要な計算を一生懸命しているのに、Aと通信している周辺機器から「1バイト送ったよ。次のデータ頂戴」と呼び出されるわけです。

その度にBの計算を中断して、Aのデータが入っているメモリを読み込んでAと通信している周辺機器に渡してあげる必要があるわけです。

これは結構無駄です。

 

DMAというのはそういった処理を自動化してくれる機能です。

最初にプログラム(CPU)から「こういうデータをこういう風に送ってね」と設定しておくと、あとは勝手にやってくれるわけです。

例えば先程の例では、「周辺機器から次のデータを求められたら次のバイトのデータを転送するように」とかできます。

 

DMA自体はメモリコピー全般に使えるように設計されているため、他にもいろいろ使いみちがあります。

・CPUと無関係に大量のデータをコピーしたい

・CPUが低消費電力状態で低速クロックで動いている時でも、データのコピーをしたい(DMAはCPUと無関係に動作するので)

etc…

この辺はハードウェア設計者より、実際に組込みソフトウェアを作っている人のほうが詳しいはずです(汗;

 

ここまで書いといて何ですが、DMAは知識として必要ですが、これによってハードウェアの組み方が変わることは普通ありません。

なので、回路設計するときはぶっちゃけあんまり関係ありません。(汗;

 

以上、小田切でした。

CPUとMPUって何が違うの?(初心者向け)

マイコンのことを「CPU」と言ったり「MPU」と言ったりします。

なにが違うのでしょうか。

 

実はほとんど変わりません。

本当は意味が違うのですが、どちらもマイコンのことを指しています。

 

しかし、厳密に言うと両者の意味は違います。

 

◯CPU:中央演算処理装置

つまり計算する部分だけを指しています。

マイコンの中には計算だけでなく、通信や入出力の機能も入っていますが、そういったものは含みません。

 

◯MPU:マイクロプロセッシングユニット

マイコンそのものを指しています。

 

つまり、マイコンのことを呼ぶならMPUが正しいのですが、慣例的にCPUとも呼んでいるわけです。

たまに会話で「このマイコンのCPUは~」というフレーズが出ますが、このときはMPUの中の演算部だけを指しています。

まぁ、めったにないですが。

 

とこんな感じです。

 

以上、小田切でした。

ARMとかCORTEXってなんだろう?

それぞれのメーカーがCPUを作っているので、各社いろいろCPUがあります。

しかし、ずーっとみていくと、いろいろな会社のCPUで「ARM」だとか「CORTEX」という単語が出てくるのに気が付かないでしょうか。

 

「アーキテクチャ」と書いてあるので、CPUの設計のことを指しているはずです。

それならばメーカーに寄って違うはず。

それなのにどのメーカーでも「ARM]とか「CORTEX」という単語が出てくる。

なんででしょう?

 

それは、「ARM」という会社がCPUの設計をしている会社だからです。

そしてARMが設計したCPUの名前が「ARMなんちゃら」とか「CORTEX」なんです。

各社自分でCPUも設計しているのですが、「ARMなんちゃらが欲しい」「CORTEX」が欲しいという声に答えてARMから設計を買ってそのCPUも作っているのです。

 

ARM社のアーキテクチャは普及しているので、一度開発していればその資産が流用できます。

ということで、ARM社のアーキテクチャを採用したCPUが最近増えているようです。

とはいえ、周辺機器は各社が作っているので、「ARMだから全部同じ」というわけではありません。

基本的なプログラムは流用できますが、周辺機器の制御部は作り直す必要があります。

 

ということで、「ARM」という文字が書いてあったら、「CPUのコア部分の設計は買ってきているんだな」と理解してください。

 

以上、小田切でした。

無線機器の技術基準適合証明と工事設計認証

無線機器を作って世に出す場合、電波法という法律を守る必要があります。

そして、それは「守ってるよ!」と自己主張すればいいというものではなく、きちんとデータを揃えて提出しないといけません。

普通はやり方がわからないので、試験機関に協力してもらってデータを揃えて提出することになります。

 

今回は無線設備の申告方法についてちょっと書きたいと思います。

それには大きく2つあります。

 

◯技術基準適合証明

実際の製品を試験機関で測定or測定データを用意して申告する方法です。

製品が100台あったら100台すべてのデータを用意して提出する必要があります。

一見面倒ですが、台数が少ない場合はこちらが簡単です。

 

◯工事設計認証

1機種に付き1台のデータを用意or試験機関で測定して申告する方法です。

100台でも1000台でも、データは1台分でいいです。

大量に作る場合はこちらほうがいいですが、その1台と同じように他の機器が製造されることを保証しないといけません。

なので、台数が少ない場合は全社の技術基準適合証明のほうが簡単です。

 

とこのように二つの方法があります。

 

以上、小田切でした。

GPIOで流せる電流っていくつ?

GPIOで流せる電流は気になりますよね。

大きければそのままLEDなどを駆動できますが、小さければトランジスタなどが必要になります。

もちろんLEDだけでなく、なにを繋げる場合でもGPIOも駆動能力はとても重要です。

 

しかし、これがなかなかデータシートで読みにくいんです。

「GPIOの電流はいくつまで流せます」と明確に書いてないことが多いです。

 

時々、絶対最大定格に「MAX~~」と書いて有る場合もありますが、絶対最大定格は「これ以上やると壊れる」と言っているだけであって、それだけ流せると保証しているわけではありません。

データシートを読んでいっても、なかなか見つかりません。

実はどこに書いてあるかというと、「DC Characteristics(DC特性)」に書いてあります。

どう書いてあるかというと、「VOH @ 4mAの電圧はxx-xxV」という書き方がしてあります。

つまり、「◯mA引ける」という書き方ではなく「4mA引いた時に何ボルトになる」という書き方をしています。

GPIOにかんして電流の記述があるのはここだけですので、これを参考にするしかありません。

2mA流したときの特性しか書いてなければ最大2mA、20mA流したときの特性が書いてあれば最大20mAということです。

もちろん、そこで書いてある電圧も重要です。

「3V、8mA以上必要な回路」に対して「8mA引いたときの電圧が2.3V~」というGPIOじゃ駆動能力足りませんからね。

 

ということで、GPIOの電流が知りたければDC特性を見てみてください。

 

以上、よろしくお願いいたします。

CPUの内蔵プルアップ・プルダウン抵抗ってなに?

CPUから出ている各ポートにたまに内蔵プルアップ抵抗やプルダウン抵抗がある場合があります。

プルアップ抵抗・プルダウン抵抗は、普通回路を引く側がCPUの外側につけるものです。

なんで、内蔵されているんでしょうか・・・?

 

実はこれは2パターンあります。

 

◯「つけるに決まっている抵抗を先につけておきます」パターン

例えば、RESETピン。

これはLOWになるとリセットされますので、通常はHIGHにしておかないといけません。

もし外側に抵抗がないとRESETピンはHかLかどちらになるか予測がつきません。

ということで、安全を見込んで中でプルアップ抵抗がついていることがあるんです。

ほかにも、JTAGなどデバッグで使用されるピンはプルアップ・プルダウンが決まっているので、最初からCPU内に内蔵されていたりします。

 

◯「プルアップ抵抗やプルダウン抵抗のコストを削減しましょう」パターン

さらに一歩進んで、プルアップ抵抗やプルアップ抵抗の両方が内蔵されていて、プログラムで有効・無効を切り替えることができるCPUがあります。

こうなると、UART_RXDのプルアップなどを(原理的には)削除できるので、外付け抵抗をかなり減らすことが出来ます。

小規模な回路だと基板が小さかったりするので、抵抗を減らせるととても部品配置がしやすくなります。

 

と、こんなふうにプルアップ・プルダウンひとつとっても、いろいろ工夫されています。

 

以上、小田切でした。