PSpice for TIを使用したパラメトリック解析について
はじめに
Texas Instrumentsが提供しているシミュレーションソフトのPSpice for TIについて日本語での使用方法説明が無かったのでメモとして残します. 記事の内容は参考文献[1],[2]に記載されているので正確な情報を知りたい方は参考文献をご参照ください.
パラメトリック解析とは
パラメトリック解析とは回路中の任意のパラメータを変化させて解析する手法であり, 変化させるパラメータの影響度合いやパラメータの最適値を決定する際に使用します[3]. 今回はRCローパスフィルタのコンデンサ容量を変化させカットオフ周波数がどの様に変化するか確認します.
PSpice for TIの基本的な使い方を知りたい方は過去の記事をご参照ください.
解析結果の事前検討
RCフィルタの抵抗を1kΩに固定してコンデンサを0.1uF, 0.5uF, 0.1uFと変化させカットオフ周波数の変化を確認します。 RCローパスフィルタのカットオフ周波数は下記の公式から求められます.
RCローパスフィルタ カットオフ周波数の公式
解析するRCフィルタのカットオフ周波数
コンデンサ容量 | カットオフ周波数 |
---|---|
0.1uF | 1.59kHz |
0.5uF | 318.30Hz |
1uF | 159.15Hz |
解析条件の設定
AC電源を使用してRCフィルタを作成します.
※AC電源などの部品配置方法が分からない方は過去の記事をご確認ください.
コンデンサの定数の部分をダブルクリックしてDisplay Propertiesを表示させます. Valueの欄に{}を付けて任意の名前を設定します. 今回はcapに設定しました.
Place -> PSpice Component... -> Search...からPSpice Part Searchを表示させ, 検索バーからPARAMを探しシンボルを配置します.
PARAMのシンボルをダブルクリックするとProperty Editorが表示されます. Property EditorのNew Propert...を選択し設定を入力します.
Add New Propertyウィンドウが表示されたら初めにDisplay[ON/OFF]のチェックを入れます。Nameの部分にコンデンサのDisplay Propertiesで設定した名称を入力します. Valueには解析を始める値を入力します. 二つの条件を入力し, Display[ON/OFF]のチェックが入っていることを確認したらOKボタンを選択してください.
Display PropertiesウィンドウのName and Valueにチェックを入れOKボタンを押してください. 回路図の画面に戻ると先ほど設定した内容が表示されるようになります.
New Simulation Profileから解析条件を作成します. AC Sweep/NoiseのGeneral Settingsを設定後にParametric Sweepの設定をおこないます. Global parameterを選択しParameter nameを入力します. 今回は入力した値を順番に解析するValue Listを使用して解析をおこないます.
※General Settingsの設定方法が分からない方は過去の記事をご確認ください.
Pspice -> Markers -> Advanced -> dB Magnitude of Voltageを配置して解析条件の設定は完了です.
解析の実行
解析の実行ボタンを押すとAvailble Setionsが表示されるのでOKボタンを押します.
解析が完了するとグラフが表示されます. どのグラフがどの条件に対応しているかはグラフのマーカ表示をダブルクリックすると確認できます.
グラフ中に条件を記入したい場合はPlot -> Label -> Text...を使用します. 文字の色を変更したい場合はChange Fontから色の設定を変更します.
カットオフ周波数を測定するのに今回はToggle Measurement Results Windowを使用します. 選択するとMeasurement Resultsが表示されるのでClick here to evaluate a new measurement... をクリックします.
Evaluate Measurementウィンドウが表示されるのでCutoff_Lowpass_3dB(1)を選択しV(R1:2)を選択します. V(R1:2)という部分は作成した回路によって異なるのでマーカ表示の横に記載されている表記を確認して選択してください.
OKボタンを押すと結果が表示されます.
補足情報
定数の変更によって変化した特性をグラフにして表示することができます.
より滑らかなグラフにするためParametric Sweepの設定をLinearに変更します. LinearはStartとEndに設定した範囲をIncrementに入力した幅で解析することができる設定です.
Trace -> Performance Analysis..を選択すると Performance Analysisウィンドウが表示されるのでWizardを選択してください.
Performance Analysis Wizardが表示されます. Step 1 of 4はNextを選択, Step 2 of 4はCutoff_Lowpass_3dBを選択してNext, Step 3 of 4はName of trace to searchにマーカ表示の横に記載されている表記を選択してNext, Step 4 of 4はNextを選択するとグラフが表示されます.
解析結果の考察
事前に予測していた値と解析の結果がほぼ一致するため結果は妥当であると判断します. 事前検討値と解析結果が若干異なる原因はAC解析で設定したステップ数の粗さだと考えます.
コンデンサ容量 | 事前検討した値 | 解析の結果 |
---|---|---|
0.1uF | 1.59kHz | 1.58807kHz |
0.5uF | 318.30Hz | 317.86220Hz |
1uF | 159.15Hz | 159.42984Hz |
おわりに
PSpice for TIを使用したパラメトリック解析方法を解説しました. PSpice for TIに限らず解析ソフト全体に言える事ですが, 実機で検証すると面倒なことを簡単にできるのが非常に便利で面白いです. しかし, 事前検討値との差からも分かるように解析結果は必ずしも正確な値とは限らないのでそれを理解した上で活用していきたいです.
参考文献
[1] Texas Instruments, ‘‘PSpice® for TI design and simulation tool, ” https://www.tij.co.jp/tool/jp/PSPICE-FOR-TI.
[2] Texas Instruments, ‘‘2.3 PSpice for TI: Parametric Sweep Analysis, ” https://training.ti.com/pspice-ti-parametric-sweep-analysis?context=1146489-1146488-1146449.
[3]Tsuyoshi Horigome, ‘‘LTspiceのパラメトリック解析の基礎, ” https://www.slideshare.net/TsuyoshiHorigome/ltspice-46019101.
PSpice for TIでのサードパーティーモデルの導入について
はじめに
Texas Instrumentsが提供しているシミュレーションソフトのPSpice for TIについて日本語での使用方法説明が無かったのでメモとして残します. 記事の内容は参考文献[1],[2]に記載されているので正確な情報を知りたい方は参考文献をご参照ください.
今回の記事では新日本無線製のオペアンプのモデルを導入して反転増幅器を作成します. 回路の作成後にAC解析を実施して導入したモデルが正常であるかの確認をおこないます. 紹介するPSpice for TIの操作方法については参考文献[2]とほぼ同じですが, 解析する回路は異なるので注意してください.
解析結果の事前検討
今回は参考文献[3]のNJM324Cを使用してAC解析をおこないます. このICを使用して10倍(20dB)の増幅率の反転増幅器を作成した場合, データシート記述より90kHz付近から増幅率の減衰が発生する図の緑点線の様なグラフになると想定されます.
他社モデルの導入
各社のサイトもしくは, PSpice.comから解析用のモデルをダウンロードします.
ダウンロードしたファイルを解凍するとモデルのファイルが二つあります. この二つのファイルをプロジェクトファイルが格納されているフォルダにコピーします.
移動したlibファイルをメモ帳で開き, ファイル名と.SUBCKTの横に書かれている名称が一致しているか確認します. 異なる場合はlibファイルの名称を.SUBCKTの横に書かれている名称に変更してください.
PSpice for TIのDesign Resourcesを一度クリックした後でToolsを開くとGnerate Part...が選択できるようになります.
Generate Partのウィンドウが出るので, Browse...を選択し, 先ほどプロジェクトファイルのフォルダに格納したlibファイルを選択して開くボタンを押します.
Pick symbols manual...にチェックが入っていることを確認してOKボタンを押します. OKボタンを押すとUndo Warningが出るのでYesを選択してください.
Model Import Wizardが出るので導入しようとしているモデルのシンボルに問題がないかを確認します. 問題がなければ完了ボタンをクリックしてください. 完了ボタンを押すとLogファイルが出力されるのでOKボタンを押してください.
※Model Import Wizardのウィンドウが表示されない場合は, Generate PartウィンドウのPick symbols manual...にチェックが入っていない可能性が高いです.
※Model Import Wizardのウィンドウでシンボルが表示されない場合はlibファイルとシンボル用のファイルが関連付けができていないと考えられます. ダウンロードしたlibファイルの名称や.OLBファイルの名称が正しいか確認してください.
ICに+マークが描かれたPlace Partボタンを押すとPlace Partのウィンドウが開きます. Librarieの項目にあるファイルマークをクリックして手動でプロジェクトフォルダ内にある.OLBファイルを参照してください.
Librariesで部品名を選択後にPartの部分に表示されているシンボル名称をダブルクリックすると回路図にシンボルを配置できるようになります.
シンボルを配置するとOnline DRCsでORCAP-2445が発生します. このワーニングはシンボルとPSpiceの解析モデルが関連付けされていない場合に発生します. このワーニングを解消するためには, Simuration SettingsでPSpiceモデルのライブラリの参照先を追加する必要があります.
Simulation Settingsを新規に作成する場合は波線に+マークが描かれている表示を選択し, 過去に作成したSimulation Settingsを編集する場合は波線に鉛筆マークが描かれている表示を選択します. Simulation SettingsのConfiguration Filesを選択すると参照するライブラリなどの設定項目を見ることができます. CategoryのLibraryの項目を選択してください.
※波線に+マークを押した際に図のようなエラーが発生してPSpiceが強制終了する場合はプロジェクトファイルの作成に問題があります. 「Pspice for TIのプロジェクトファイル作成とトランジェント解析について」の記事を参考にしてプロジェクトファイルから作成し直してください.
Filenameの横にあるBrowse...を選択し, 導入したモデルの.libファイルを選択して開きます.
Configuraed Filesの欄に開いた.libファイルが追加されていることを確認してAdd to Designを選択しOKボタンを押します. 以上で他社モデルの導入は完了です.
※導入するモデルによっては.OLBの部品名称がlib部品名称が異なる場合があり, ORCAP-2445が解消されない事があります. その場合はProperty Editorなどから部品名称を修正する必要があります.
※この手法で導入したモデルはプロジェクトファイル単位でしか反映されません. プロジェクトファイルを作成し直した場合はモデルを再度導入する必要があります.
解析の実行
※解析を実行した際にORSIM-15108エラーが発生する場合は, シンボルとPSpiceモデルの対応付けが上手くいっていない可能があります. Simulation SettingsのConfiguration Filesで追加した.libファイルが正しいかとOLBファイルの部品名が正しいかを確認してください.
他社製のモデルを使用した場合はマーカの配置数や種類に制限が発生します. 例として前回の記事で紹介した Plot Window TemplatesのBode Plot dB - dual Y axesマーカを他社モデルを使用した回路で配置するとORCAP-15098, ORPSIM-16592エラーが発生して解析を実行することができません.
dB計測用マーカにPSpice -> Advanced -> dB Magnitude of Voltageを使用し, 位相計測用マーカにPSpice -> Advanced -> Phase of Voltageを使用することでエラーを回避することができます. しかし, マーカを一度に配置してしまうと出力されるグラフのY軸が一つにまとめられてしまします.
dB値のY軸と位相のY軸を別々に表示するには, マーカを一つづつ配置してシミュレーションを実行する必要があります. シミュレーションが完了しグラフが表示されたらPlot -> Add Y Axisを選択しY軸一つを増やします.
この状態でもう一つのマーカを配置するとY軸を分けてプロットすることができます.
解析結果の考察
データシートのグラフを用いた事前検討で90kHz付近からdB値が低下すると推測していました. 今回のシミュレーションの結果も同様に90kHz付近で設定から増幅率の低下が発生しています. ことからこのシミュレーションは妥当であると判断します.
おわりに
新日本無線製オペアンプNJM324Cの周波数特性解析をPSpice for TIを使用しておこないました. 他社製ICを使用するとマーカの設置条件に制約が発生しますが解析はできます. 使用していて不便な所は他社製IC配置によって使用できなくなるマーカをエラーが発生するまで確認できない所です. しかし, CadenceのPSpice向けに作られたモデルを簡単に読み込んで解析できる点は非常に魅力的なので, 解析するモデルに応じてLTSpiceと使い分けをしていくのが良いかと思います.
参考文献
[1] Texas Instruments, ‘‘PSpice® for TI design and simulation tool, ” https://www.tij.co.jp/tool/jp/PSPICE-FOR-TI.
[2] Texas Instruments, ‘‘2.6 PSpice for TI: 3rd Party Model Import, ” https://training.ti.com/pspice-ti-3rd-party-model-import?context=1146489-1146488-1146482.
[3]新日本無線株式会社, ‘‘NJM324C 4回路入り低消費オペアンプ, ” https://www.njr.co.jp/electronic_device/products/NJM324C.html.
[3]日清紡マイクロデバイス, ‘‘NJM324Cシリーズ 4回路入り低消費オペアンプ, ” https://www.nisshinbo-microdevices.co.jp/ja/products/operational-amplifier/spec/?product=njm324c.
PSpice for TIを使用したAC解析について
はじめに
Texas Instrumentsが提供しているシミュレーションソフトのPSpice for TIについて日本語での使用方法説明が無かったのでメモとして残します. 記事の内容は参考文献[1],[2]に記載されているので正確な情報を知りたい方は参考文献をご参照ください.
今回の記事では前回作成した反転増幅器の増幅率を100倍に変更しAC解析を実施します. 紹介するPSpice for TIの操作方法については参考文献[2]とほぼ同じですが, 解析する回路は異なるので注意してください.
TIが配信しているトレーニングビデオについて
前回の記事で参考文献として紹介していましたが, TIはPSpice for TIの使い方を下記のトレーニングビデオで紹介しています. すべて英語ですが記事では紹介できていない使い方を解説しているので視聴をおすすめします.
現在配信されているトレーニングビデオの一覧
1.1 PSpice for TI: A Brief Overview
1.2 PSpice for TI: Workspace Walkthrough
1.3 PSpice for TI: Cursor Operations
1.4 PSpice for TI: Waveform and Plot Settings
1.5 PSpice for TI: Measurement Functions
1.6 PSpice for TI: DC Bias Point Analysis
2.1 PSpice for TI: DC Sweep Analysis
2.2 PSpice for TI: AC Sweep Analysis
2.3 PSpice for TI: Parametric Sweep Analysis
2.4 PSpice for TI: Transient Analysis
2.5 PSpice for TI: Monte Carlo Histogram and Temperature Sweep Analysis
2.6 PSpice for TI: 3rd Party Model Import
解析結果の事前検討
解析を実施する前にOPA2743を使用した反転増幅器の解析結果がどのようになるかを検討します. 参考文献[3]OPA2743のデータシートから 周波数とゲインの特性についてのグラフを確認します. 反転増幅器の増幅率を100倍(40dB)に設定するので, 80kHz付近から徐々にゲインが下がる赤色の点線のようなグラフになると予想します.
解析用回路の編集
前回の回路からSine信号源と計測用マーカを削除します.
増幅率を100倍に変更するため, 抵抗R2を200kΩに変更します.
Independent Sources( 電源の設定画面)のSineタブを選択し, AC Sourceの設定画面から設定をおこない, Sine信号源を削除した部分にAC信号源を配置します.
解析条件の設定
New Simulation Profileを選択し, New Simulationのファイル名を記入してください.
Simulation Settingsの画面が表示されるのでAnalysis Typeの設定をAC Sweep/Noiseに設定します. 解析を始める周波数, 解析を終了する周波数, 解析のステップ数を画像のとおりに設定します.
※同じプロジェクトファイルで作成した解析条件は下記図のタブから参照し変更することができます.
dB値と位相差がプロットされた一般的なボード線図を表示するにはPSpice->Markers->Plot Window Templates...を選択します. Plot Window Templatesというウィンドウが表示されるので, Bode Plot dB - dual Y axesを選択します.
※ Bode Plot dB - dual Y axesはTI製ICを使用する場合のみ利用できます. 他社製ICのモデルが混在した状態でAC解析を実施する場合は, 「PSpice for TIでのサードパーティーモデルの導入について」の記事も確認してください.
測定用マーカを配置できるようになるのでオペアンプの出力に配置します.
解析の実行
Run PSpiceのボタンを押すと解析結果が表示されます.
出力されたグラフだとデータシートに記載されているグラフと比較しずらいので, グラフの軸を編集します.Plot -> Axis Settings...を選択してください.
Axis SettingsのY Axisタブから軸のレンジを編集します. 位相のY軸は1なので1を選択し, レンジを-20から180に変更します. また, dB値のY軸は2なので2を選択し, データシートに合わせて-20から140に変更します.
X軸の目盛表示少なすぎてグラフとして分かりずらいので, 目盛の数をデータシートに合わせて2刻みにします. 先ほどと同様の手順でAxis Settingsを表示させX Gridタブを開きます. Automaticのチェックを外し, MinorのIntervals between Majorを5に変更します.
詳細にデータを確認したい場合はToggle cursorを使用します. 任意の測定方法を選択することで, 右クリックと左クリックでカーソルを置くことができます. 測定結果は画面したの表に表示されます. カーソルを使って測定した結果, 80kHz付近のdB値は約36.6dBでした.
解析結果の考察
データシートのグラフを用いた事前検討で80kHz付近からdB値が低下すると推測していました. 今回のシミュレーションの結果も同様に80kHz付近で設定した40dBの増幅率から3.4dBの増幅率の低下が発生しています. ことからこのシミュレーションは妥当であると判断します.
おわりに
OPA2743を使用した反転増幅器のシミュレーションを用いてAC解析についての解説をおこないました. PSpice for TIでAC解析を実施した感想として, グラフを作るのにひと手間かかるので不便なところはありますが慣れれば問題なく使用できるシミュレーションソフトだと感じました.
参考文献
[1] Texas Instruments, ‘‘PSpice® for TI design and simulation tool, ” https://www.tij.co.jp/tool/jp/PSPICE-FOR-TI.
[2] Texas Instruments, ‘‘2.2 PSpice for TI: AC Sweep Analysis, ” https://training.ti.com/pspice-ti-ac-sweep-analysis?context=1146489-1146488-1146480.
[3] Texas Instruments, ‘‘OPA2743, ” https://www.tij.co.jp/product/jp/OPA2743.
PSpice for TIのプロジェクトファイル作成とトランジェント解析について
はじめに
Texas Instrumentsが提供しているシミュレーションソフトのPSpice for TIについて日本語での使用方法説明が無かったのでメモとして残します. 記事の内容は参考文献[1],[2]に記載されているので正確な情報を知りたい方は参考文献をご参照ください.
Pspice for TIの概要
PSpice for TIは Texas InstrumentsがCadence の PSpiceに下記の機能制限を付けて配信しているシミュレーションソフトです. CadenceのPSpiceはTexas Instrument, Analog Devices, 東芝, 新日本無線, ロームなどと協力してモデルを作成しており, PSpice for TIでも他社メーカのモデルを使用して解析ができます[3].
Cadenceの有料版PSpiceからの機能制限
PSpiceで作成した回路データをレイアウト設計用CADに引き渡す機能が利用できない
PSpice上で使用できる製品がTIのICのみになっている(自分でモデルのインポートをすれば他社ICも利用可能)
TI以外のICやダイオードなどをインポートして解析に使用した場合は配置できる測定用マーカの数と種類に制限が発生する
使用方法の説明
参考文献[2]のトレーニングビデオの内容に従ってプロジェクトファイルの作成とトランジェント解析の実行方法を説明します. 解析する回路はTI製オペアンプOPA2743を使用した反転増幅器で増幅率は20倍に設定します.
プロジェクトファイルの作成
Flie -> New -> Project...の順で選択します.
New Projectというウィンドウが表示されるのでNameとLocationを入力します。
※ファイル名やフォルダパスに日本語が含まれると解析条件の設定時にエラーが発生してPspiceが強制終了するので注意してください.
Create PSpice Projectというウィンドウが表示されるのでCreate a blank proje...を選択してOKボタンを押してください.
部品の配置
抵抗やコンデンサなどの基本的な部品はPlace -> PSpice Componet..に入っています. 増幅器を作るために図のように抵抗を三つ配置してください.
DC電源の設定はPlace -> PSpice Componet.. -> Modeling Application...を選択すると出てくるModeling Applicationのウィンドウからおこないます. Sources -> Independent Sourcesを選択すると電源の設定画面が出るので, 今回はDCタブから12VのDC電源を設定し二つ配置します.
Sine信号の設定も同様にModeling ApplicationのウィンドウのSources -> Independent Sourcesからおこないます. 電源の設定画面のSineタブを選択すると周波数や電圧などを設定できます. 今回はVAMPL:100mA, Frequency:1000Hzに設定します.
TI製ICの配置はPlace -> PSpice Componet.. -> Search...からおこないます. Searchを選択するとPSpice Part Searchが出るので検索部分にOPA2743と入力して部品を探してください. 表示された検索結果の部分で右クリックをするとPlace Symbolという選択肢が出るので選択して配置してください.
GNDはキーボードのGキーを回路図上で押すことで設定画面を出すことができます。シンボルを選んでOKボタンを押すと配置可能になるので, 5つGNDを配置してください.
解析に使用する部品が全てそろったので, 図のように部品を再配置してください. 部品の回転は部品を選択した状態でキーボードのRキーを押すことでできます.
部品間の配線はキーボードのWキーを押すことでできます. 図のように配線してください.
部品の定数を変更する場合は数値をダブルクリックするとDisplay Propertiesが表示されるのでValueを編集してOKボタンを押してください. 今回はR1を2kΩ, R2を40kΩ, V2を-12Vに変更します.
配線に名前を設定する場合はキーボードのNキーを押してください. Place Net Aliasという画面が表示されるのでAliasに名称を入力することでネット名を配置できます.
※回路図中にテキストを配置を配置したい場合はTキーを押すとテキストの設定画面が表示されます.
解析条件の設定
シミュレーションの設定をおこなうためには, 波線マークに+が描かれているNew Simulation Profileを選択してください. 選択するとNew Simulationの画面が表示されるので英語でファイル名を記入してください.
※New Simulation Profileを選択した際に下記の図のエラーが表示される場合はプロジェクトファイルのフォルダパスやファイル名に日本語を使用している可能性が高いのでプロジェクトファイルを再度作成してください.
プロジェクトファイルの作成に問題がない場合はSimulation Settingsの画面が表示されます. 今回はトランジェント解析を実施するのでAnalysis Typeの設定は変更せず, Run To Timeの設定とMaximum Step Sizeの設定のみ変更しOKボタンを押します.
※OKボタン選択後に設定内容を変更したい場合は波線マークに鉛筆が描かれているEdit Simulation Profileを押すとSimulation Settingsの画面が表示できます.
測定ポイントの設定にはボルテージマーカを使用します. 今回はオペアンプのマイナス側入力端子と出力にマーカを設置します.
解析の実行
解析を実行する場合は, Run PSpiceのボタンを選択します.
解析を実行すると解析結果を表示するウィンドウが現れますが, View Simulation Resultsボタンを押さないと波形が表示されません.
表示されたシミュレーション結果を確認すると緑色の波形が赤色の波形が表示されます. どちらがどのマーカの波形を示しているかは回路図に配置したマーカの色を確認すると分かります.
シミュレーションの結果から出力信号は入力信号と比較して位相が反転した状態で20倍されていることが分かり, 正常にシミュレーションができていると言えます.
おわりに
PSpice for TIを使用したトランジェント解析の方法を解説しました. 実際に使用してみて解析の条件設定がUI化されているので設定方法がLTSpiceより分かりやすかったです. また, 暗号化されてLTSpiceでは読み込むことができなかった他社製ICのモデルがPSpice for TIでは読み込んで使用することが出来たので非常に便利なツールだと感じました. しかし, 日本語の資料や参考になる情報が乏しいので最初の導入時やエラーが発生したときの対処が困難でした. TIから公式の日本語資料や解説するサイトが配信されることを期待します.
参考文献
[1] Texas Instruments, ‘‘PSpice® for TI design and simulation tool, ” https://www.tij.co.jp/tool/jp/PSPICE-FOR-TI.
[2] Texas Instruments, ‘‘1.2 PSpice for TI: Workspace Walkthrough, ” https://training.ti.com/pspice-ti-workspace-walkthrough?context=1146489-1146487-1146481.
[3]Cadence , ‘‘Browse Cadence PSpice Model Library, ” https://www.pspice.com/amplifiers-and-linear-ics/operational-amplifiers/cmos.
USB機能付き格安マイコンCH552TのUSBシリアル通信プログラム解説
はじめに
前回の記事ではUSBディスクリプタの解説を主におこないました. 今回の記事ではCH552TのUSBシリアルプログラムの解説をおこなっていきます.
USB通信の構造
アプリケーションレベルのUSB通信では仮想の通信線を「パイプ」と呼び, 必要に応じてパイプの数を設定します. パイプを使った通信ではホスト(パソコンなど)からデータを転送することを「OUT」, デバイス(マイコンなど)からデータを転送することを「IN」と呼びます. アプリケーションレベルでの通信構造を図に示します.
USBデバイスを接続した直後はデフォルトパイプ(エンドポイント0)でコントロール転送のみが可能な状態となっています. コントロール転送を用いてコンフィギュレーション(ディスクリプタを用いた初期設定)を行い, デバイスの使用方法を設定します. 設定後はエンドポイントが追加され, パイプが構築されます[3].
USBSerialプログラムについて
USBSerialのプログラムはUSB_Serial.cに書かれています.
分かりづらい部分
はじめに, このプログラムを最初に見たときに私が分からなかった部分を解説します.
以下に示すプログラムはKeil C51でメモリの絶対アドレスを指定するためのコードです. ここではエンドポイントという通信用のFIFOバッファのメモリを確保しています. SDCCで同じプログラムをコンパイルする場合はメモリ指定の書き方が異なるので注意してください.
UINT8X Ep0Buffer[THIS_ENDP0_SIZE] _at_ 0x0000; UINT8X Ep2Buffer[2*MAX_PACKET_SIZE] _at_ 0x0008; UINT8X Ep1Buffer[MAX_PACKET_SIZE] _at_ 0x00a0;
以下に示すプログラムは「UsbSetupBuf」の定義です. CH554.Hで定義している型「PUSB_SETUP_REQ」を用いて, 先ほど定義したメモリ「Ep0Buffer」のデータをキャストしています. このプログラムでは「PUSB_SETUP_REQ」で指定されている名称が出てくるのでプログラムを見る際には「PUSB_SETUP_REQ」を確認しておくといいです.
#define UsbSetupBuf ((PUSB_SETUP_REQ)Ep0Buffer)
数値の送信方法
紹介したシリアル通信プログラムではASCIIコードでの通信を前提としています. つまり, ASCIIコードに則った数字は送受信できますが, 純粋な数値を送受信することはできません. 数値を送信するためには以下に示す変換プログラムを用いる必要があります. このプログラムは数値を「i_data」に入れると, ASCIIの文字コードに変換して「str_t」に入れてくれるプログラムです. このプログラムはUSB_Serial.c内に書かれているのでそれを使用してください.
void u16str(UINT16 i_data, char *str_t) { int n,i; if(str_t) { str_t[0] = '\0'; n = 0; do { i = n; do { str_t[i+1] = str_t[i]; } while (i--); str_t[0] = 0x30+(i_data % 10); i_data /= 10; n++; } while (i_data); } }
USBの割り込み処理
CH552TをパソコンのUSBポートに接続すると, 始めに「case UIS_TOKEN_SETUP | 0:」(エンドポイント0を使ったコントロール転送)に入りデバイスの設定をおこないます. 「case UIS_TOKEN_SETUP | 0:」内では「UsbSetupBuf」に入った値に応じた初期設定をおこないます. この設定を完了すると他のエンドポイントが使用可能になります.
「case UIS_TOKEN_OUT | 2: 」,「case UIS_TOKEN_IN | 2: 」はエンドポイント2で実際の通信処理をおこなうための部分となっています.
void USBInterrupt( void ) interrupt INT_NO_USB using 1 { UINT8 len; if(UIF_TRANSFER) { switch (USB_INT_ST & (MASK_UIS_TOKEN | MASK_UIS_ENDP)) { case UIS_TOKEN_OUT | 2: LEN = USB_RX_LEN; RecieveData(); //EcoSendData(RecBuf); break; case UIS_TOKEN_IN | 2: UEP2_T_LEN = 0; UEP2_CTRL = UEP2_CTRL & ~ MASK_UEP_R_RES | UEP_R_RES_ACK; UEP2_CTRL = UEP2_CTRL & ~ MASK_UEP_T_RES | UEP_T_RES_NAK; break; case UIS_TOKEN_SETUP | 0: len = USB_RX_LEN; if(len == (sizeof(USB_SETUP_REQ))) { SetReqtp = UsbSetupBuf->bRequestType; SetupLen = UsbSetupBuf->wLengthL; len = 0; SetupReq = UsbSetupBuf->bRequest; if(SetReqtp == 0xc0) { Ep0Buffer[0] = DataBuf[num]; Ep0Buffer[1] = DataBuf[num+1]; len = 2; if(num<24) { num += 2; } else { num = 24; } } else if(SetReqtp == 0x40) { len = 9; } else { switch(SetupReq) { case USB_GET_DESCRIPTOR: switch(UsbSetupBuf->wValueH) { case 1: pDescr = DevDesc; len = sizeof(DevDesc); break; case 2: pDescr = CfgDesc; len = sizeof(CfgDesc); break; default: len = 0xff; break; } if ( SetupLen > len ) SetupLen = len; len = SetupLen >= 8 ? 8 : SetupLen; memcpy(Ep0Buffer,pDescr,len); SetupLen -= len; pDescr += len; break; case USB_SET_ADDRESS: SetupLen = UsbSetupBuf->wValueL; break; case USB_GET_CONFIGURATION: Ep0Buffer[0] = UsbConfig; if ( SetupLen >= 1 ) len = 1; break; case USB_SET_CONFIGURATION: UsbConfig = UsbSetupBuf->wValueL; break; default: len = 0xff; break; } } } else { len = 0xff; } if(len == 0xff) { SetupReq = 0xFF; UEP0_CTRL = bUEP_R_TOG | bUEP_T_TOG | UEP_R_RES_STALL | UEP_T_RES_STALL;//STALL } else if(len <= 8) { UEP0_T_LEN = len; UEP0_CTRL = bUEP_R_TOG | bUEP_T_TOG | UEP_R_RES_ACK | UEP_T_RES_ACK; } else { UEP0_T_LEN = 0; UEP0_CTRL = bUEP_R_TOG | bUEP_T_TOG | UEP_R_RES_ACK | UEP_T_RES_ACK; } break; case UIS_TOKEN_IN | 0: //endpoint0 IN switch(SetupReq) { case USB_GET_DESCRIPTOR: len = SetupLen >= 8 ? 8 : SetupLen; memcpy( Ep0Buffer, pDescr, len ); SetupLen -= len; pDescr += len; UEP0_T_LEN = len; UEP0_CTRL ^= bUEP_T_TOG; break; case USB_SET_ADDRESS: USB_DEV_AD = USB_DEV_AD & bUDA_GP_BIT | SetupLen; UEP0_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; break; default: UEP0_T_LEN = 0; UEP0_CTRL = UEP_R_RES_ACK | UEP_T_RES_NAK; break; } break; case UIS_TOKEN_OUT | 0: // endpoint0 OUT len = USB_RX_LEN; UEP0_T_LEN = 0; UEP0_CTRL = UEP_R_RES_ACK | UEP_T_RES_ACK; break; default: break; } UIF_TRANSFER = 0; } if(UIF_BUS_RST) { USB_DEV_AD = 0x00; UIF_SUSPEND = 0; UIF_TRANSFER = 0; UIF_BUS_RST = 0; } if (UIF_SUSPEND) { UIF_SUSPEND = 0; if ( USB_MIS_ST & bUMS_SUSPEND ) { while ( XBUS_AUX & bUART0_TX ); SAFE_MOD = 0x55; SAFE_MOD = 0xAA; WAKE_CTRL = bWAK_BY_USB | bWAK_RXD0_LO; PCON |= PD; SAFE_MOD = 0x55; SAFE_MOD = 0xAA; WAKE_CTRL = 0x00; } } else { USB_INT_FG = 0x00; } }
おわりに
シリアル通信プログラムについての解説をおこないました. 次回はUSBマウスのプログラムについて紹介します.
参考文献
[1]べーた, ‘‘Cerevo TechBlog [21日目]激安中華USBマイコンは使えるのか, ” https://tech-blog.cerevo.com/archives/6068/.
[2]江苏沁恒股份有限公司, ‘‘8 位增强型USB 单片机CH552、CH551,” https://datasheet.lcsc.com/szlcsc/Jiangsu-Qin-Heng-CH552T_C111367.pdf.
[3]USB通信プログラミングテクニック, ‘‘USBの基本アーキテクチャ, ” http://www.picfun.com/usb02.html.
USB機能付き格安マイコンCH552TでUSBシリアル通信をおこなう方法
はじめに
前回までの記事でCH552Tの回路と開発環境について解説しました. 今回はCH552のUSBシリアルのプログラムを紹介します.
マイコンプログラムの最初はLチカをおこなうことが多いですが, 参考文献[1]のブログでLチカとタイマ割り込みのプログラムが紹介されているのでHello Worldのプログラムを公開したいと思います.
※Lチカとタイマ割り込みのプログラムの解説記事がコメント欄などから要望があれば作成します.
プログラム
作成したサンプルプログラムを以下のリンクに置いておきます.
このプログラムは公式が配布しているCH554用シリアル通信プログラムをCH552, CH551用に改造したプログラムです. CH55Xシリーズのサンプルプログラムは互換性があり基本的に流用可能ですが, 使用するマイコンによっては実装されていない機能があるので適時修正が必要です.
もしもCH554のプログラムをCH552, CH551で利用する場合はUSBホスト機能に関するコードを削除してください.
※そのままCH554のプログラムをCH552, CH551に書き込んだ場合はブートローダーが破損するため書き込みが二度とできなくなります.
改造元のプログラムは一番初めの記事で紹介したサンプルプログラムの中にあります.
e_dragon / WCH / source / — Bitbucket
サンプルコードの使い方
サンプルコードが置いてあるgithubのリンクからサンプルプログラムをダウンロードします.
第1回の記事を参考にプロジェクトファイルを作成してください.
作成したプロジェクトファイルの中にダウンロードしたファイルをコピーします.
uVision5を起動し, 「Souse Group 1」の項目で右クリックして画像で示す「Add Existing Files to Group 'Source Group 1'」を選択します.
「Add Existing Files to Group 'Source Group 1'」の画面が出てくるので, 「main.c」「USB_Serial.c」を追加します. そして, 「Public」フォルダ内にある「Debug.C」を追加します.
「main.c」をダブルクリックして開き, 「Rebuild」「Translate」を押してください. エラーが出なければコンパイルが成功しています.
書き込み
書き込みにはWCHISPToolが必要です. インストールしたWCHISPToolを起動し, 「8 Bit CH55X series」のタブを開きます.
次に「Chip model」の欄からCH552を選択します.
最後に「User File」の部分で自分が作成したプログラムのヘックスファイルを参照します. ヘックスファイルは作成したプロジェクトフォルダの「Objects」内にあります.
これで書き込み準備は完了です. 第2回の記事で紹介した回路を作成し書き込みをおこないます.
USBをPCに差し込む際にCH552T書き込み回路についているボタンを押しながら差し込みます. 適切にブートローダーが起動できた場合は, WCHISPToolにCH552の表示が出ます.
「Download」ボタンを押すことでCH552に書き込むことができます.
プログラムの動作確認
今回のプログラムではボーレートが「57600bps」に設定されています. Arduino IDEのシリアルモニタで確認した結果を画像に示します.
USBデバイスクラスについて
サンプルプログラムを理解するために「USB_Serial.c」に記述されているUSBデバイスクラスについて解説します. 完全新規のUSBデバイスを開発する場合は本来なら, USBホスト(パソコン側など)とUSBデバイス(マイコン側など)双方のプログラムを作成する必要があります. しかしUSBデバイスクラスの規格に基づいてUSBデバイスを製作する場合はUSBホスト側のプログラムを作成する必要は基本的にありません. デバイスクラスが用いられる代表的な製品としてキーボードやマウスなどのパソコン用のデバイスがあります.デバイスクラスの表を以下に示します.
表1 USBのデバイスクラスコードについて
デバイスクラス名 | クラスコード(bDevice Class) |
---|---|
Audio | 0x01 |
CDC(Communication Data Class) | 0x02 |
HID(Human Interface Devices) | 0x03 |
Image | 0x06 |
MTP(Media Transfer Protocol) | 0x06 |
Printer | 0x07 |
MSC(Mass Storage Class) | 0x08 |
USB Hub | 0x09 |
CCID | 0x0B |
UVC(USB Video Class) | 0x0E |
PHDC | 0x0F |
Wireless Controller Bluetooth | 0xE0 |
(参考文献[4] より引用)
WCHが販売するUSBシリアル変換IC「CH340」としてCH552Tを認識させるため一部のディスクリプタで異なる設定をおこないますが, 基本的にはCDCクラスと同じプログラムを作成します. CDCクラスはUSBを利用して通信をおこなうために規定された規格でシリアル通信をおこなうことができます[4].
USB・シリアル変換IC CH340G: 半導体 秋月電子通商-電子部品・ネット通販
サンプルプログラムのUSBディスクリプタについて
USBディスクリプタとはUSBの属性などを記述する部分です. ディスクリプタの設定を適切におこなうことで, USBデバイスのデバイスクラスや エンドポイントの設定などをおこなうことができます. 今回のサンプルプログラムに記述されているディスクリプタを以下に示します.
UINT8C DevDesc[18]={0x12,0x01,0x10,0x01,0xff,0x00,0x02,0x08, 0x86,0x1a,0x23,0x55,0x04,0x03,0x00,0x00,0x00,0x01}; UINT8C CfgDesc[39]={0x09,0x02,0x27,0x00,0x01,0x01,0x00,0x80,0xf0,0x09,0x04,0x00,0x00,0x03,0xff,0x01,0x02,0x00,0x07,0x05,0x82,0x02,0x20,0x00,0x00,0x07,0x05,0x02,0x02,0x20,0x00,0x00,0x07,0x05,0x81,0x03,0x08,0x00,0x01};
デバイスディスクリプタ
以下に示すデバイスディスクリプタの表を用いて「DevDesc[18]」の解説をおこないます.
表2 デバイスディスクリプタの解説とサンプルプログラムでの設定
Field | Offset | Size(byte) | 詳細 | 今回の設定値 |
---|---|---|---|---|
bLength | 0 | 1 | ディスクリプタの全体長。デバイスディスクリプタは 18(0x12)Byte 固定。 | 0x12 |
bDescriptorType | 1 | 1 | ディスクリプタの種別番号。DEVICE は 1。 | 0x01 |
bcdUSB | 2 | 2 | USB のバージョン(BCD)。0x100(USB 1.0?)、0x110(USB 1.1)、0x200(USB 2.0)、0x300(USB 3.0) | 0x10,0x01 |
bDeviceClass | 4 | 1 | クラス番号 (USBクラス)。0x0 と 0xFF 以外は USB-IF が予約している。 | 0xff |
bDeviceSubClass | 5 | 1 | サブクラス番号。0x0 と 0xFF 以外は クラス番号に依存する。 | 0x00 |
bDeviceProtocol | 6 | 1 | プロトコル番号。0x0 と 0xFF 以外は クラス、サブクラス番号に依存する。 | 0x02 |
bMaxPacketSize0 | 7 | 1 | エンドポイント0の最大パケットサイズ(Byte)。速度別に規定がある。 | 0x08 |
idVendor | 8 | 2 | ベンダID(VID)。USB-IF より ID を発行(有償)してもらう必要有り。 | 0x86,0x1a |
idProduct | 10 | 2 | プロダクトID(PID)。ベンダー各社がプロダクト毎に ID を自由に振りふれる。 | 0x23,0x55 |
bcdDevice | 12 | 2 | デバイスのバージョン番号(BCD)。 | 0x04,0x03 |
iManufacturer | 14 | 1 | 製造者の ストリングディスクリプタ の Index 番号。0の場合、指定無し。 | 0x00 |
iProduct | 15 | 1 | Product の ストリングディスクリプタ の Index 番号。0の場合、指定無し。 | 0x00 |
iSerialNumber | 16 | 1 | シリアルナンバーのストリングディスクリプタの Index 番号。0の場合、指定無し。複数接続を前提とするならば指定が必要。 | 0x00 |
bNumConfigurations | 17 | 1 | コンフィグレーションディスクリプタの個数。複数の Configuration より複数の Interface の方が好まれるケースが多い。 | 0x01 |
(参考文献[5] より引用)
デバイスディスクリプタの4バイト目「bDeviceClass」の部分でCDCクラスを意味する「0x02」ではなく「0xff」となっています. 今回のプログラムでは「CH340」としてデバイスを認識させるためWCHが公式で出しているCH340のデバイスドライバを使用するからです. Windowsで使用する場合はWindows7以前のOSの場合別途デバイスドライバをインストールする必要があります. Windows8, Windows10ではCH340が標準サポートになっているので必要ないと考えられます[6].
コンフィグレーションディスクリプタ
以下に示すデバイスディスクリプタの表を用いてコンフィグレージョンディスクリプタの解説をおこないます. コンフィグレーションディスクリプタは「CfgDesc[39]」に含まれています. 「CfgDesc[39]」にはインターフェイスディスクリプタ, エンドポイントディスクリプタも含まれているので注意が必要です.
//「CfgDesc[39]」に含まれるコンフィグレーションディスクリプタ 0x09,0x02,0x27,0x00,0x01,0x01,0x00,0x80,0xf0
表3 コンフィグレージョンディスクリプタの解説とサンプルプログラムでの設定
Field | Offset | Size(byte) | 詳細 | 今回の設定値 |
---|---|---|---|---|
bLength | 0 | 1 | Descriptorの全体長。CONFIGURATIONは9(0x09)Byte固定 | 0x09 |
bDescriptorType | 1 | 1 | Descriptor Types。CONFIGURATIONは2。 | 0x02 |
wTotalLength | 2 | 2 | 当該、および従属ディスクリプタの全長 | 0x27,0x00 |
bNumInterface | 4 | 1 | インターフェイスディスクリプタの個数 | 0x01 |
bConfigurationValue | 5 | 1 | Configuration番号。SET_CONFIGURATION時のID。 | 0x01 |
iConfiguration | 6 | 1 | ConfigurationのストリングディスクリプタのIndex番号。0の場合、指定なし | 0x00 |
bmAttribures | 7 | 1 | bit7:予約(1), bit6:Self Power(0/1), bit5:Remote Wakeup機能(0/1), bit4-0:予約(0) | 0x80 |
bMaxPower | 8 | 1 | 必要とするバスからの電流の1/2(mA)。最大 500(=0xFA*2)mA。値の1/2を設定するのは 1 byte に収めたかったため。USB 3.0では消費電流量bMaxPowerの単位が2mAから8mAへ変更されている | 0xf0 |
(参考文献[5] より引用)
インターフェイスディスクリプタ
//「CfgDesc[39]」に含まれるインターフェイスディスクリプタ 0x09,0x04,0x00,0x00,0x03,0xff,0x01,0x02,0x00
表4 インターフェイスディスクリプタの解説とサンプルプログラムでの設定
Field | Offset | Size(byte) | 詳細 | 今回の設定値 |
---|---|---|---|---|
bLength | 0 | 1 | ディスクリプタの長さ。INTERFACE は 9(0x9)Byte 固定。 | 0x09 |
bDescriptorType | 1 | 1 | ディスクリプタの種別。INTERFACE は 4。 | 0x04 |
bInterfaceNumber | 2 | 1 | インターフェイスの識別番号。複合デバイス(Composite device)の場合、異なった値が設定されなければならない。デフォルトは 0。 | 0x00 |
bAlternateSetting | 3 | 1 | 代替設定を選択するための値。bInterfaceNumberが同じで bAlternateSetting が異なる別々のディスクリプタを持っている場合、ホスト側からのSET_INTERFACEコマンドで切り替えることが出来る。デフォルトは 0。 | 0x00 |
bNumEndpoints | 4 | 1 | エンドポイント数(ただし エンドポイント0 は除く) | 0x03 |
bInterfaceClass | 5 | 1 | クラス番号(USBクラス)。bDeviceClass(デバイスディスクリプタ) の設定が 0 だった場合、この設定が参照される。0x0 は未定義、0xFF は Vendor-specific。 | 0xff |
bInterfaceSubClass | 6 | 1 | サブクラス番号。0x0 と 0xFF 以外は クラス番号に依存する。HIDの時はブートプロトコルに対応しているかどうかのフラグとして使われる。 | 0x01 |
bInterfaceProtocol | 7 | 1 | プロトコル番号。0x0 と 0xFF 以外は クラス、サブクラス番号に依存する。HIDのときはbInterfaceSubClassが指定されている時だけ意味を持つ。 | 0x02 |
iInterface | 8 | 1 | Interface の STRING Descriptor の Index 番号。0の場合、指定無し。 | 0x00 |
(参考文献[5] より引用)
エンドポイントディスクリプタ
//「CfgDesc[39]」に含まれるエンドポイントディスクリプタ 0x07,0x05,0x82,0x02,0x20,0x00,0x00 0x07,0x05,0x02,0x02,0x20,0x00,0x00 0x07,0x05,0x81,0x03,0x08,0x00,0x01
エンドポイントディスクリプタは複数あるので表5には今回の設定値を記載しません.
表5 エンドポイントディスクリプタの解説
Field | Offset | Size(byte) | 詳細 |
---|---|---|---|
bLength | 0 | 1 | Descriptor の全体長。ENDPOINT は 7(0x7)Byte 固定。 |
bDescriptorType | 1 | 1 | ディスクリプタの種別番号。ENDPOINT は 5。 |
bEndpointAddress | 2 | 1 | bit 7 : IN=1, OUT=0, bit 6-4 : 予約(0), bit 3-0 : エンドポイント番号 |
bmAttributes | 3 | 1 | bit 7-2 : 予約(0), bit 1-0 : 00=コントロール転送、01=アイソクロナス転送、10=バルク転送、11=インタラプト転送 |
wMaxPacketSize | 4 | 2 | 最大パケット長。 |
bInterval | 6 | 0 | 最大待ち時間。転送方式、速度によって意味合いが異なる。 |
(参考文献[5] より引用)
以上が今回のプログラムのディスクリプタです. CH55Xシリーズを用いてオリジナルの機器を作ることを考えた場合, 自分でディスクリプタの設定を決める必要があるのでディスクリプタについて頭の片隅に置いておくと開発がスムーズに進むと思います.
おわりに
サンプルプログラムの導入方法とディスクリプタについて解説をおこないました. 次回はサンプルプログラム「USB_Serial.c」について解説しようと考えています.
参考文献
[1]べーた, ‘‘Cerevo TechBlog [21日目]激安中華USBマイコンは使えるのか, ” https://tech-blog.cerevo.com/archives/6068/.
[2]江苏沁恒股份有限公司, ‘‘8 位增强型USB 单片机CH552、CH551,” https://datasheet.lcsc.com/szlcsc/Jiangsu-Qin-Heng-CH552T_C111367.pdf.
[3]Infinitegra, ‘‘Infinitegra TechBlog USBデバイスクラス,” http://www.infinitegra.co.jp/blog/?p=43.
[4]AVR-CDC, ‘‘ソフトウェア USB による仮想 COM ポート,”http://www.recursion.jp/prose/avrcdc/driverj.html.
[5]おなかすいたwiki, ‘USB/ディスクリプタ,”http://wiki.onakasuita.org/pukiwiki/?USB%2F%E3%83%87%E3%82%A3%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%82%BF.
[6]ネクストステップ サポートBlog, ‘‘Arduino NANO 互換品(CH340チップ使用)のデバイスドライバー,”https://support.next-step.asia/tag/ch340-usb%E3%82%B7%E3%83%AA%E3%82%A2%E3%83%AB%E5%A4%89%E6%8F%9B%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90/.
[7]Electrodragon, ‘‘Electrodragon Wiki,”https://www.electrodragon.com/w/WCH.
USB機能付き格安マイコンCH552Tの開発環境構築について
はじめに
CH552Tの開発環境構築について解説します.
CH55Xシリーズはintel8051というマイコンを魔改造した物なので8051の開発環境でコンパイルしたコードならWCH社公式のISPToolでマイコンにプログラムを書き込むことができると思います.
今回はElectrodragon WikiでCH55Xシリーズのサンプルプログラムが公開されているKeilC51(uVision)を使って開発環境を構築します[1].
無料評価版Keil C51(uVision)の入手方法
無料評価版Keil C51(uVision)のインストーラはarm Keilの公式サイトからダウンロードすることができます.
※無料評価版ではオブジェクトサイズが32KBまで制限されています[3].
C51を選択するとFig. 2の登録画面が出ます. 必要事項を記入するとインストーラをダウンロードできます.
あとはインストールするだけです.
注意事項
windowsのユーザー名が日本語だとユーザーフォルダ名が日本語になるためKeil C51(uVision)のインストールに失敗します. ユーザー名が日本語の場合は英語名のユーザーアカウントを作ってインストールしてください.
Keil C51の有料版はKeil C51 COMPLER ASSEBLER KIT LICの場合241,560円でPK51 PROFESSIONAL DEVELOPER'SKIT LIC(1年間のライセンス)の場合154,430円だそうです. ※アメリカからの輸入品扱いとなるため価格は為替によって変動します.
学生ライセンスなども存在しないため個人で有料版を購入することはあまり現実的ではありません. コードサイズ上限以上のプログラムを作成する場合はSDCCを利用した方がいいと思います.
CH55Xシリーズ用のプロジェクトファイルの作り方
uVisionを起動したら赤丸で示す部分を選択してください.
赤丸で示す部分を選択するとプロジェクト製作画面がでるので好きな名前をつけてください.
Keil C51は公式でCH55Xシリーズをサポートしているわけでは無く, intel8051系のマイコンAT89C51やAT89S51用のコンパイラを持っているだけです[1][4]. そのためプロジェクトファイルを作る際にはAT89C51もしくはAT89S51を選択してください. OKを選択するとプロジェクトファイルが作られます.
uVisionの標準設定ではHEXファイルを出力してくれません[1]. HEXファイルを出力するように設定を変更する必要があります. Fig. 6に示すOptions for Tergetを選択してください.
Options for Tergetを選択するとFig. 7に示す画面が出てきます. 赤線で示すOutputタブを開き, 赤丸で示すCreate HEX Fileのチェックボックスにチェックをつけてください.
HEXファイルの出力とは関係ありませんが, TargetタブのMemory Model をLarage : variables in XDATAに設定しておくと便利です.
※HEXファイルの設定とメモリサイズの設定はプロジェクトファイルごとにおこなう必要があります.
サンプルプログラムの入手先
Electrodragonが配布しているサンプルプログラムは以下のリンクにあります.
e_dragon / WCH / source / — Bitbucket
ファイルをダウンロードしたら「e_dragon-wch-ed9fe291571d\CH55x\EVT\CH554EVT\EXAM」内にあるCH554.uvproj以外を作成したプロジェクトフォルダ内にコピーしてください.
CH554はCH55Xシリーズの一つでCH552にUSBホスト機能を追加したマイコンとなっています. そのためCH554のプログラムはUSBホスト機能などCH552に実装されていない機能のプログラムを削除もしくは使用しないことでCH552でも利用できます.
WCHISPToolの入手先
WCHISPToolはWCH社が公式で提供しているプログラムです. CH55Xシリーズなどにプログラムを書き込むために使用します.
WCHISPTool_Setup.exe - 江苏沁恒股份有限公司
WCHISPToolのSetup.exeをダウンロードしてインストールしてください.
おわりに
CH552の開発環境構築について解説をおこないました. Lチカなどの基本的なプログラムについては参考文献[1]のブログで紹介されているので, 次の記事ではCDCクラスを用いたUSBシリアル通信をCH552でおこなう方法について解説したいと考えています.
参考文献
[1]べーた, ‘‘Cerevo TechBlog [21日目]激安中華USBマイコンは使えるのか, ” https://tech-blog.cerevo.com/archives/6068/.
[2]江苏沁恒股份有限公司, ‘‘8 位增强型USB 单片机CH552、CH551,” https://datasheet.lcsc.com/szlcsc/Jiangsu-Qin-Heng-CH552T_C111367.pdf.
[3]boochow, ‘‘楽しくやろう。ARMの開発環境「MDK」と「µVision」でmbedのデバッグを試してみた,” https://blog.boochow.com/article/441231592.html
[4]Electrodragon, ‘‘Electrodragon Wiki,”https://www.electrodragon.com/w/WCH.