ルネサス H8SX/1653Fは、けっこう強力なCISC組み込み向けマイコンです。
・最大50MHz動作
(しかし内蔵周辺モジュールの最大クロックは35MHzなので注意が必要だ。周辺モジュールがCPUのスピードアップに追いついていないのか? 設定してみると48MHzでも動いてしまったけど、保証されていないので怖くて常用はしていない)
・基本命令(レジスタが対象、のような)は1ステートで実行(1ステート=1クロックサイクル)
・内蔵FLASH ROM 384KB
・内蔵RAM 40KB
・32bit乗除算器内蔵
・USB 2.0内蔵(ただしフルスピード:12Mbps)
・16bitタイマ 6ch
・8bitタイマ 8ch
・A/D, D/A
・シリアルインタフェイス(SCI) 6ch (CRC演算器のおまけつき)
うち2chは非同期のみ。また、平均転送レートジェネレータと称する、なんだかピンと来ない名称のボーレートジェネレータもついている。これはクロック波形を適当に歯抜けさせることで、それっぽい(?)ビットレートにつじつまを合わせるものらしい。
・I2Cコントローラ
・DMAC
・DTC(内部要因専用のDMAC?)
・バスコントローラはエンディアン変換・アドレスデータマルチプレクスなどにも対応。DRAMリフレッシュコントローラは無い。
・H-UDI(JTAGデバッガ対応)
個人的には、H8SXは、H8/300H, H8Sなどと比較して、ベクタベースレジスタ(VBR)が追加されているのが嬉しい。これで、リセット以外の割り込みベクタを任意のアドレスに配置できる。
本来これはROMレス版のための機能であるようですが(ベクタを遅い外部ROMではなく、内蔵RAMに配置して、割り込み応答を高速化する)。
また、H8SXは、H8系、H8S系では出来なかった、奇数アドレスへの16bit/32bitアクセスが出来るようになった。
正確には、H8/H8Sでは、奇数アドレスへの16/32bitデータアクセスは、勝手にアドレスのbit0が落とされて偶数アドレスへのアクセスとなってしまい、アドレスエラーも出ないので、不気味なバグの温床となる可能性があった。
これを、H8SXでは、自動的に複数回のバスアクセスを行って、問題なくこなしてくれるようになった。遅くはなるのでそういうアクセスはしないようにするべきではあるが、不気味な動作でなくなったのはうれしい。
USBはエンドポイントが少ないけど、割と簡単に使えそう。エンドポイントのFIFOはメモリマップされておらず、送受信データはI/Oレジスタに読み書きする(バルク転送用エンドポイントに対してはDMACを使うことが可能)。
EP0の最大パケット長が8バイトなのは悲しい。コントロール転送でも64バイト使わせてくれたっていいじゃないか。
内蔵FLASH書き換え用の「ブートモード」は、SCIブートモードとUSBブートモード両方が実装されている。
なぜ「両方実装」とあえて書くかというと、USBつきのH8Sでは、同一型番品種でも枝番によってSCIブートモードとUSBブートモードのどっちか一方しか実装してないものがあったからだ。また、USBつきのH8Sなんだけど、いかにも急いで作りましたって感じで、USBモジュールがありはするけど実は外部バス経由で接続されているため、シングルチップモードではUSBが使えない、なんていう石もありましたね(実はマルチチップ実装だったり??知らないけど)。
SCIブートモードに関してはデータシートに詳細にプロトコルが記載されているので、簡単に書き込みプログラムが作れる。
H8系マイコンのブートモードは、ユーザが作成した書き込み用ファームをまずはホストマシンからマイコンのRAMに転送し、それを使ってFLASH書き換えを行う、という形式が多いが、これは書き込み用ファームがすでにH8SX内に仕込まれているので、ホストマシン側の通信プログラムさえ書けばいい。
でもUSBブートモードに関する記載は、なんかハンパである。→後記。よく見たらhmの記載で十分なようだ。基本的にSCIブートモードのコマンドと同じということか。これ書いたときなにか勘違いしていたのか?>オレ
残念ながら、現在はアキバのお店などでは手に入らない…。評価・開発用ボードを市販しているところも無い…。
→2006/07/13 追記。北斗電子がボードを出した。
できたらもうちょっとピン数をふんぱつして、外部バス使用時にも、もっとポートを使えたらいいと思うけど、パッケージが120ピンを越えると問題あるのかな…。
→2006/07/13 追記。SDRAMインタフェイスなどが追加された144ピン版のH8SX/1663グループが追加された。
個人的に、H8系の周辺モジュールは、SCIのパフォーマンスがもう少し欲しい気がする。
同期で10MHzくらいのクロックを使いたかったのだが、周辺モジュールクロック(Pφ)を32MHzに設定した場合でも、内蔵ボーレートジェネレータでは最高8MHzまでしか生成できない。
送信の際、送信データレジスタに、送信データを書き込んだあとでフラグをクリアしないとデータが出て行かない。同様に受信の際も、受信データを引き取ったあとフラグをクリアしないと次のデータがシフトレジスタから流れ込んでこない。
このフラグクリアが余計な手間に感じる(DMACを併用した場合はフラグクリアを自動的にやってくれるのでよけいにそう感じる?)
ちなみに旧三菱系のM16CコアマイコンについてるUSARTは、こういったフラグクリアを行う必要がない(って、R8C/Tinyのしか使ったことがないけど)。
コメント