概要
USBホストになれるCH559は中国語のデータシートしかありません。しかしながら英訳をしてくれた人がいますので、そのデータを元に日本語化しつつデータシートを読んでいきたいと思います。
8ビットチップなので、比較的単純なはずです。このデータシートを読み込み事でもう少し複雑な似たようなチップのデータシートを読む練習になるはずです。
元データ
- 公式中国語データシート(CH559DS1.PDF)(WCH公式中国語サイト)
- 英語化データシート(CH559_Doc_English)(GitHub)
公式データシートは中国語しかありません。その関係で英語版のページからはダウンロードもできません。ちょっとわかりにくいのですが、中国語版のページから検索する必要があります。
英語化したデータシートはGitHubで公開されており、Webページ化もされています。
上記ページになります。このページはhugoというツールで作成されており、ローカルで実行してリアルタイムに反映するサーバーモードと、静的ファイルを吐き出す機能等があります。作成時の確認はサーバーモードを使いますが、最終的には静的ファイルに出力することになります。
hugoはCentOSでは構築しにくかったので、Windows用のバイナリを使わせてもらいました。Ubuntuとかだとかんたんに導入できると思います。
日本語版作成データ
英語版データシートをフォークして、日本語化をしていきたいと思います。
実際にWebページ化したものが上記になります。GitHubのデータをビルドしているわけではなく、手元データを静的ファイルに出力して確認してからGitHubに反映されているので若干差分がでる可能性がありますので注意してください。
1.概要
チップの概要が記述されています。命令セットはMCS51で、これはIntel 8051チップの互換品みたいです。ベースとなる8051は40年以上前の商品になります。ここが問題で、gccでサポートしていない命令セットとなります。
そのため開発環境の選択肢が非常に狭いです。個人でC言語で開発する場合には事実上SDCC一択になりそうです。
CPUクロックは最大56MHzまで対応しており、内蔵64Kのフラッシュと256バイトの内蔵iRAM、6KバイトのオンチップxRAMをサポートしています。CH559はRAMの種類が複数あるみたいで、これの使い分けが重要そうでした。
ブロック図をみてみます。
左上からフラッシュが64Kで、メモリが256Bと6KBの2種類。タイマーがT0からT3の4種類。PWMがPWM1からPWM3までの3種類。UARTがUART0とUART1の2種類。SPIがSPI0とSPI1の2種類。LEDコントロールがありますがPWMではないのでなんだろう。起動時のパワーオンリセットと、ウォッチドッグリセットがあって、内部発振器もしくは外部発振器からPLLでクロックをn倍に逓倍(ていばい)する構成のようです。またLDOが内蔵されており、5V入力から3.3Vが作れるんですね。あとはポートがたくさんならんでいます。
ここで違和感があるのがPWMですね。これだけ1から3と0が無いです。どこに行ってしまったんだろう?
2.特徴
ほぼ概要と同じですが、もう少しだけ詳しく説明があります。詳細は今後調べていくのでざっくりと内容を確認していきます。
Core
概要とあまり情報は変わらず。
ROM
100Kの消去サポートとありますが、よくわかりません。おそらく速度系のことだと思います。原文を確認しても「支持100K次擦写」と単位が記述されていません。データシートを検索しても100Kという記述はここにしかありません。
RAM
256バイトのiRAMはレジスタ的な使い方で、6KBのxRAMが一般的なメモリなのかな。外部拡張が可能みたいですね。
USB
他のUSBを利用するUSBホストモードと、PCなどからUSBとして見えるUSBデバイスモードが利用できます。USBホストは2つまでのUSBを利用でき、USBデバイスは1つだけ利用できるみたいですね。USBホストx2、もしくはUSBホスト+USBデバイスみたいな使い方ができます。
Timer
4つのタイマーがあるようですが、T0からT2は標準的なタイマーとして利用でき、T2とT3は拡張されているようです。
PWM
PWM1とPWM2は8ビット、PWM3は16ビットのようですね。
UART
UART0は標準的なUARTで、UART1は16C550互換とあります。
SPI
SPI0はマスターとスレーブの両方、SPI1はマスターモードのみ対応しているようです。
ADC
8個の8ビットもしくは10ビットADCがあり、DMAも使えるようです。
LED-CTRL
ここが原文をみてもよくわかりません。結構なクロックでの制御が可能ですね。LEDスクリーンってなんだろう?
XBUS
8ビットのパラレルバスみたいですね。
GPIO
最大45GPIOなので結構あります。出力は3.3Vですが、一部のピンをのぞいて5Vトレラントと呼ばれる5V入力をしても大丈夫な耐圧入力です。
Interrupt
割り込みは14種類あり、GPIOからも割り込み設定が可能なようです。
Watch-Dog
一定周期でタイマーを更新しないと自動的にリセットがかかるWatch-Dogタイマーに対応しています。ハングアップ時に自動リセットするためには便利な機能だと思います。
Reset
電源起動時のパワーオンリセット、ソフトウエア的なリセット、ウォッチドッグタイマによる自動再起動、任意外部入力によるリセットの4種類をサポートしています。
Clock
12MHzの内蔵クロックか、GPIO端子に接続した外部クロックを利用可能です。PLLを内蔵しているので、供給されたクロックをn倍に逓倍(ていばい)してから使うようです。クロック上限は56MHzですが、12MHzを4倍にした48MHzが事実上の標準的なクロックのはずです。
Power
5V電源入力から3.3Vを作成するLDOを内蔵。
ID番号
チップにはID番号が埋め込まれているようです。
まとめ
ざっくりと概要がわかりました。GPIOが56本と結構大きな気もしますが8ビットチップなので全体的な機能はそれほど複雑じゃない気がします。とはいえUSB周りはそれなりに面倒な気がします。
コメント
「100Kの消去サポート」はフラッシュが10万回書き換え可能って意味な気がします。
たさかに!
ありがとうございます