1 テスト条件
1.1 I2C信号プログラム
MounRiver Studio Ⅱにより、CH32V203の下記関数を作製してテストしている。
以下に関数を記載するが、こんな感じとして見て下さい。
なぜかたと言うと、今回I/Oについては、関係するものだけを分離して記載するのに時間がかかるため割愛しているので。
呼び出し方法 (例: POWER_UPコマンド 3byte送信して応答 1byte受信する。)
Si4735のディバイスNoは0x11
コマンドデータはcmdpar[ ],応答データはrespar[ ]配列に入れる。
cmdpar[0] = 0x01; cmdpar[1] = 0xC0; cmdpar[2] = 0x05;
Si4735_i2C(0x11,cmdpar,3,respar,1);
関数
例の結果
respar[0] = 0x80
モニター(シリアル)は
なお関数中の cts_ready_flag はGPO2端子を割込処理により監視する関数を作製している。
以下に関数を記載するが、こんな感じとして見て下さい。
なぜかたと言うと、今回I/Oについては、関係するものだけを分離して記載するのに時間がかかるため割愛しているので。
呼び出し方法 (例: POWER_UPコマンド 3byte送信して応答 1byte受信する。)
Si4735のディバイスNoは0x11
コマンドデータはcmdpar[ ],応答データはrespar[ ]配列に入れる。
cmdpar[0] = 0x01; cmdpar[1] = 0xC0; cmdpar[2] = 0x05;
Si4735_i2C(0x11,cmdpar,3,respar,1);
関数
例の結果
respar[0] = 0x80
モニター(シリアル)は
Hobbylab Touch Position2
TxCmd[01] Rx[1] = 80
ハード出力信号は3.1を参照TxCmd[01] Rx[1] = 80
なお関数中の cts_ready_flag はGPO2端子を割込処理により監視する関数を作製している。
1.2 発信回路は外部から入力
Si4735の発信回路は試験(4.1 発信回路不良の判定方法)のため、発振子を外して外部から32.768kHz(3V方形波)をRCLKに入力した。
2 タイムチャート(AN332)
2.1 Powerup
デバイスをパワーダウンモードからパワーアップモードへ移行させるためのブート手順には、2つの方法があります。
1つ目は最も一般的な方法で、デバイス内部メモリからのブートです。
2つ目は、システムコントローラからデバイスに書き込まれるファームウェアパッチを使用したブートです。
デバイスをパワーアップする手順は以下の通りです。
(1) RST = 0 を維持した状態で、VDDおよびVIOを供給します。
VDDおよびVIOの最小立ち上がり時間は25 μsであり、RST = 1に設定する前に、VDDとVIOが250 μs間安定している必要があります。
電源の投入順序は任意です。
RSTはVIO電源ドメインに属しているため、VIOが供給される前はRST = 0の状態を維持する必要があります。
(2) 希望するバスモードに合わせてGPO1およびGPO2を設定します。
RST = 1にする前のGPO1およびGPO2の最小セットアップ時間は、システムコントローラによってアクティブに駆動される場合は30 ns、内部の1 MΩ抵抗によってGPO1(ハイ)およびGPO2(ロー)のデフォルト状態が設定される場合は100 μsです。
(3) RST = 1に設定します。
(4) コマンドレジスタにPOWER_UPを書き込みます。
POWER_UPコマンドは、デバイスに対し、内部メモリからのブート(セクション「7.1. Device Memoryからのパワーアップ」を参照)または システムコントローラから送信されたファームウェアパッチからのブート(セクション「7.2. Component Patchからのパワーアップ」を参照)を行うよう指示します。
CTS = 1となった後、デバイスは通常動作を開始し、追加のコマンドを受け入れる準備が整います。
POWER_UPコマンドは、DIN(ピン13、Si4732ではピン16)、DFS(ピン14、Si4732ではピン1)、RIN(Si4704/05/3x-D62ではピン16)およびLIN(Si4704/05/3x-D62ではピン15)の 状態をアナログまたはデジタルオーディオモード用に設定し、GPO2/INTを割り込み動作用に設定します。
このコマンドが実行される前、これらのピンはハイインピーダンス状態に設定されています。
GPIO_CTLおよびGPIO_SETコマンドは、GPO2/INTおよびGPO3の状態を設定します。
これらのコマンドを実行する前は、これらのピンはハイインピーダンス状態にあります。
(5) RCLKを供給します。
RCLKバッファはVIO電源ドメインにあるため、VIOへの電源供給後であればいつでもRCLKを供給可能です。
RCLKは、FM_TUNE_FREQコマンドのように受信機を有効にするコマンドの実行前10 nsの時点で有効である必要があり、また、TX_TUNE_POWERコマンド(値0x00) のようにキャリアを無効にするコマンドの実行後10 nsの間も有効である必要があります。
キャリアが有効な場合、適切なAGC動作を行うためにRCLKが必要です。
キャリアが無効な場合は、RCLKの供給を停止したり、設定を変更したりしても構いません。

1つ目は最も一般的な方法で、デバイス内部メモリからのブートです。
2つ目は、システムコントローラからデバイスに書き込まれるファームウェアパッチを使用したブートです。
デバイスをパワーアップする手順は以下の通りです。
(1) RST = 0 を維持した状態で、VDDおよびVIOを供給します。
VDDおよびVIOの最小立ち上がり時間は25 μsであり、RST = 1に設定する前に、VDDとVIOが250 μs間安定している必要があります。
電源の投入順序は任意です。
RSTはVIO電源ドメインに属しているため、VIOが供給される前はRST = 0の状態を維持する必要があります。
(2) 希望するバスモードに合わせてGPO1およびGPO2を設定します。
RST = 1にする前のGPO1およびGPO2の最小セットアップ時間は、システムコントローラによってアクティブに駆動される場合は30 ns、内部の1 MΩ抵抗によってGPO1(ハイ)およびGPO2(ロー)のデフォルト状態が設定される場合は100 μsです。
(3) RST = 1に設定します。
(4) コマンドレジスタにPOWER_UPを書き込みます。
POWER_UPコマンドは、デバイスに対し、内部メモリからのブート(セクション「7.1. Device Memoryからのパワーアップ」を参照)または システムコントローラから送信されたファームウェアパッチからのブート(セクション「7.2. Component Patchからのパワーアップ」を参照)を行うよう指示します。
CTS = 1となった後、デバイスは通常動作を開始し、追加のコマンドを受け入れる準備が整います。
POWER_UPコマンドは、DIN(ピン13、Si4732ではピン16)、DFS(ピン14、Si4732ではピン1)、RIN(Si4704/05/3x-D62ではピン16)およびLIN(Si4704/05/3x-D62ではピン15)の 状態をアナログまたはデジタルオーディオモード用に設定し、GPO2/INTを割り込み動作用に設定します。
このコマンドが実行される前、これらのピンはハイインピーダンス状態に設定されています。
GPIO_CTLおよびGPIO_SETコマンドは、GPO2/INTおよびGPO3の状態を設定します。
これらのコマンドを実行する前は、これらのピンはハイインピーダンス状態にあります。
(5) RCLKを供給します。
RCLKバッファはVIO電源ドメインにあるため、VIOへの電源供給後であればいつでもRCLKを供給可能です。
RCLKは、FM_TUNE_FREQコマンドのように受信機を有効にするコマンドの実行前10 nsの時点で有効である必要があり、また、TX_TUNE_POWERコマンド(値0x00) のようにキャリアを無効にするコマンドの実行後10 nsの間も有効である必要があります。
キャリアが有効な場合、適切なAGC動作を行うためにRCLKが必要です。
キャリアが無効な場合は、RCLKの供給を停止したり、設定を変更したりしても構いません。

2.2 Powerdown
デバイスをパワーアップ・モードからパワーダウン・モードへ移行させるには、POWER_DOWNコマンドを書き込む必要があります。
デバイスをパワーダウンし、VDDおよびVIO(オプション)の供給を停止する手順は以下の通りです。
(1) RCLK = 0に設定します(オプション)。
RCLKバッファはVIO電源ドメインにあるため、VIOが供給されている間はいつでも動作可能です。
コマンド送信の前後10 ns間は、RCLKが有効である必要があります。
また、適切なAFC動作のためには、RCLKが常に有効である必要があります。
それ以外の時間帯であれば、RCLKの供給停止や再設定を行っても構いません。
(2) コマンドレジスタにPOWER_DOWNを書き込みます。
すべてのレジスタ内容が失われることに注意してください。
(3) RST = 0に設定します。
POWER_DOWNコマンドの完了後、RSTを10 ns間ハイレベルに保持する必要があることに注意してください。
(4) VDDの供給を停止します(オプション)。
(5) VIOの供給を停止します(オプション)。
VDDの供給を停止せずにVIOの供給を停止してはなりません。予期しないデバイス動作を引き起こす可能性があります。

デバイスをパワーダウンし、VDDおよびVIO(オプション)の供給を停止する手順は以下の通りです。
(1) RCLK = 0に設定します(オプション)。
RCLKバッファはVIO電源ドメインにあるため、VIOが供給されている間はいつでも動作可能です。
コマンド送信の前後10 ns間は、RCLKが有効である必要があります。
また、適切なAFC動作のためには、RCLKが常に有効である必要があります。
それ以外の時間帯であれば、RCLKの供給停止や再設定を行っても構いません。
(2) コマンドレジスタにPOWER_DOWNを書き込みます。
すべてのレジスタ内容が失われることに注意してください。
(3) RST = 0に設定します。
POWER_DOWNコマンドの完了後、RSTを10 ns間ハイレベルに保持する必要があることに注意してください。
(4) VDDの供給を停止します(オプション)。
(5) VIOの供給を停止します(オプション)。
VDDの供給を停止せずにVIOの供給を停止してはなりません。予期しないデバイス動作を引き起こす可能性があります。

2.3 CTS割り込み
2.3.1 GPO2の割込信号_1
AN332の解説では『10.Timingで紹介されている。』
コマンドがデバイスに受け付けられ、その実行が完了したことを示す2つのインジケータがあります。
CTS(Clear to Send)とSTC(Seek/Tune Complete)です。
各コマンドの送信後、CTSビットがセットされます。これは、コマンドがデバイスに受け付けられ、次のコマンドを受け入れる準備が整ったことを示します。
また、ほとんどのコマンドにおいて、CTSビットはコマンドの実行が完了したことも示します。
対象となるコマンドは以下の通りです。
(1) POWER_UP、POWER_DOWN、GET_REV、GET_PROPERTY、GPIO_CTL、GPIO_SET
(2) FM受信コンポーネント:
FM_TUNE_STATUS、FM_RSQ_STATUS、FM_RDS_STATUS
(3) AM/SW/LW受信コンポーネント:
AM_TUNE_STATUS、AM_RSQ_STATUS。CTSのタイミングモデルを図23に示します。

コマンドがデバイスに受け付けられ、その実行が完了したことを示す2つのインジケータがあります。
CTS(Clear to Send)とSTC(Seek/Tune Complete)です。
各コマンドの送信後、CTSビットがセットされます。これは、コマンドがデバイスに受け付けられ、次のコマンドを受け入れる準備が整ったことを示します。
また、ほとんどのコマンドにおいて、CTSビットはコマンドの実行が完了したことも示します。
対象となるコマンドは以下の通りです。
(1) POWER_UP、POWER_DOWN、GET_REV、GET_PROPERTY、GPIO_CTL、GPIO_SET
(2) FM受信コンポーネント:
FM_TUNE_STATUS、FM_RSQ_STATUS、FM_RDS_STATUS
(3) AM/SW/LW受信コンポーネント:
AM_TUNE_STATUS、AM_RSQ_STATUS。CTSのタイミングモデルを図23に示します。

2.3.2 GPO2の割込信号_2 (周波数設定時等)
CTSビットに加え、コマンドの実行完了を示すためにSTCビットを使用するコマンドがいくつかあります(例:FM_TUNE_FREQ)。
次のコマンドを送信する前に、STCビットがセットされるのを待つことを強く推奨します。
割り込みを使用しない場合は、GET_INT_STATUSコマンドを送信してSTCビットの状態をポーリングし、同ビットがセットされたことを確認してから次のコマンドを送信することができます。
実行完了を示すためにSTCビットを使用するコマンド:
(1) FM受信コンポーネント:FM_TUNE_FREQ、FM_SEEK_START
(2) AM/SW/LW受信コンポーネント:AM_TUNE_FREQ、AM_SEEK_START
CTSおよびSTCのタイミングモデルを図24に示します。
次のコマンドを送信する前に、STCビットがセットされるのを待つことを強く推奨します。
割り込みを使用しない場合は、GET_INT_STATUSコマンドを送信してSTCビットの状態をポーリングし、同ビットがセットされたことを確認してから次のコマンドを送信することができます。
実行完了を示すためにSTCビットを使用するコマンド:
(1) FM受信コンポーネント:FM_TUNE_FREQ、FM_SEEK_START
(2) AM/SW/LW受信コンポーネント:AM_TUNE_FREQ、AM_SEEK_START
CTSおよびSTCのタイミングモデルを図24に示します。

2.3.3 GPO2の割込信号_3
SET_PROPERTYコマンドには、コマンドの実行完了を示すインジケータはありませんが、その完了タイミングは保証されており、tCOMPと呼ばれます。
CTSおよびSET_PROPERTYコマンドの完了タイミング・モデル(tCOMP)を、図25に示します。

CTSおよびSET_PROPERTYコマンドの完了タイミング・モデル(tCOMP)を、図25に示します。

2.3.4 GPO2の割込時間
| Command | tCTS | tSTC | tCOMP | tINT |
| POWER_UP | 110 ms | ー | ー | 1 μs |
| POWER_DOWN | 300 μs | ー | ー | |
| GET_REV | ー | ー | ||
| GET_PROPERTY | ー | ー | ||
| GET_INT_STATUS | ー | ー | ||
| PATCH_ARGS | ー | ー | ||
| PATCH_DATA | ー | ー | ||
| FM_RSQ_STATUS | ー | ー | ||
| FM_RDS_STATUS | ー | ー | ||
| FM_TUNE_STATUS | ー | ー | ||
| FM_TUNE_FREQ | 60 ms | ー | ||
| FM_SEEK_START | 60 ms | ー | ||
| SET_PROPERTY | ー | 10 ms | ||
| FM_AGC_STATUS | ー | ー | ||
| FM_AGC_OVERRIDE | ー | ー | ||
| GPIO_CTL | ー | ー | ||
| GPIO_SET | ー | ー | ||
| AM_RSQ_STATUS | ー | ー | ||
| AM_TUNE_STATUS | ー | ー | ||
| AM_TUNE_FREQ | 80ms | ー | ||
| AM_SEEK_START | 80ms | ー |
3 タイムチャート実測値
3.1 CTS割り込み
3.1.1 GPO2の出力信号
POWER_UPコマンドでGPO2に出力指示した場合は出力に切り替わる(Lo→Hi)時間は10.3 (ms) だった。
①Si4735ディバイスNo 0x11
②POWER_UPコマンドで CTS割込=1(有効)、GPO2出力=1(有効)、PATCH=0(通常起動)、
XOSCEN=0(外部RCLK使用)、FUNC=0(FM受信)、OPMODE=5(アナログ音声出力)
I2C信号 0x01 0xC0 0x05
③10.3(ms) GPO2信号 Lo → Hi [ GPO2出力に確定 ]
④30.3(ms) GPO2信号 Hi→ Lo → Hi [ 割込信号 ]
⑤応答受信 0x80
0x01,0xC0,0x05のコマンドを送信後、CTS割込が発生し、応答信号0x80が出た信号図

②POWER_UPコマンドで CTS割込=1(有効)、GPO2出力=1(有効)、PATCH=0(通常起動)、
XOSCEN=0(外部RCLK使用)、FUNC=0(FM受信)、OPMODE=5(アナログ音声出力)
I2C信号 0x01 0xC0 0x05
③10.3(ms) GPO2信号 Lo → Hi [ GPO2出力に確定 ]
④30.3(ms) GPO2信号 Hi→ Lo → Hi [ 割込信号 ]
⑤応答受信 0x80
0x01,0xC0,0x05のコマンドを送信後、CTS割込が発生し、応答信号0x80が出た信号図

3.1.2 GPO2出力直後のCTS割込信号
(1)POWER_UPコマンド実行からCTS割込時間を計測した結果(3.1.1の図参照)
30.3 (ms) だった。
(2)CTS割込の時間を測定した結果
2 (us)の幅で信号が出ていた。
POWER_UPの応答信号0x80の部分の時間軸を拡大した図

30.3 (ms) だった。
(2)CTS割込の時間を測定した結果
2 (us)の幅で信号が出ていた。
POWER_UPの応答信号0x80の部分の時間軸を拡大した図

3.1.3 通常のCTS割込信号
POWER_UPコマンドの次にGET_REVコマンドを実行し、その時のCTS割込時間を計測した結果
コマンドを送信してから 130(us) 後にCTS割込が発生していた。
GET_REVコマンド実行からCTS信号が出て、応答信号が出るまでのタイムチャート図

図に無いが、CTSの割込信号幅は同じ2 (us)だった。
コマンドを送信してから 130(us) 後にCTS割込が発生していた。
GET_REVコマンド実行からCTS信号が出て、応答信号が出るまでのタイムチャート図

図に無いが、CTSの割込信号幅は同じ2 (us)だった。
3.1.4 周波数設定時の割込信号
タイムチャート(AN332)の 2.3.2 GPO2の割込信号_2 で説明しているものの確認試験を実施した。
なお以下コマンドを実施することによりFM放送の受信が出来ることを確認できました。
tSTCの時間は 36.4 (ms)だった。
今回の試験のコマンド実施概要
モニター(シリアル)は
コマンドを送信してから 130(us) 後にCTS割込が発生していた。
GET_REVコマンド実行からCTS信号が出て、応答信号が出るまでのタイムチャート図

⑥の時間を測定出来る様に時間軸を拡大。 ⑥ = tSTCの時間は 36.4 (ms)

ただし、GPO2の割込信号が見えないので、⑦のデータ付近の時間軸を拡大する。

⑦のコマンド前に割込があることが判る。(赤い点が見える)
なお以下コマンドを実施することによりFM放送の受信が出来ることを確認できました。
tSTCの時間は 36.4 (ms)だった。
今回の試験のコマンド実施概要
| ① | POWER_UP | 0x01,0xC0,0x05 | |
| ② | GET_PROPERTY,GPO_IEN | 0x13,0x00,0x00,0x01 | |
| ③ | SET_PROPERTY,GPO_IEN | 0x12,0x00,0x00,0x01,0x00,0xC1 | STC割込使用 |
| ④ | GET_PROPERTY,GPO_IEN | 0x13,0x00,0x00,0x01 | |
| ⑤ | FM_TUNE_FREQ | 0x20,0x00,0x20,0x4E,0x00 | 周波数 82.7MHz=8270=0x204Eほか |
| ⑥ | 第二割込待ち | ||
| ⑦ | FM_TUNE_STATUS | 0x22,0x00 | |
| 100(ms)待ち | |||
| ⑧ | FM_TUNE_STATUS | 0x22,0x01 | |
| 100(ms)待ち | |||
| ⑨ | FM_TUNE_STATUS | 0x22,0x00 |
Hobbylab Touch Position2
TxCmd[01] Rx[1] = 80
TxCmd[13] Rx[4] = 80 00 00 80
TxCmd[12] Rx[1] = 80
TxCmd[13] Rx[4] = 80 00 00 C1
TxCmd[20] Rx[1] = 80
TxCmd[22] Rx[8] = 81 01 20 4E 40 25 00 01
TxCmd[22] Rx[8] = 80 01 20 4E 40 25 00 01
TxCmd[22] Rx[8] = 80 01 20 4E 40 25 00 01
POWER_UPコマンドの次にGET_REVコマンドを実行し、その時のCTS割込時間を計測した結果TxCmd[01] Rx[1] = 80
TxCmd[13] Rx[4] = 80 00 00 80
TxCmd[12] Rx[1] = 80
TxCmd[13] Rx[4] = 80 00 00 C1
TxCmd[20] Rx[1] = 80
TxCmd[22] Rx[8] = 81 01 20 4E 40 25 00 01
TxCmd[22] Rx[8] = 80 01 20 4E 40 25 00 01
TxCmd[22] Rx[8] = 80 01 20 4E 40 25 00 01
コマンドを送信してから 130(us) 後にCTS割込が発生していた。
GET_REVコマンド実行からCTS信号が出て、応答信号が出るまでのタイムチャート図

⑥の時間を測定出来る様に時間軸を拡大。 ⑥ = tSTCの時間は 36.4 (ms)

ただし、GPO2の割込信号が見えないので、⑦のデータ付近の時間軸を拡大する。

⑦のコマンド前に割込があることが判る。(赤い点が見える)
3.1.5 発信回路不具合の割込信号
(1)発信回路不具合で周波数制御コマンドを送信した時点で処理が完全にストップします。Google AI (Gemini)
0x20: FM_TUNE_FREQ (FM選局コマンド)
0x40: AM_TUNE_FREQ (AM選局コマンド)
と言うことで実験してみることにする。
(2)確認試験は 3.1.2 GPO2出力直後のCTS割込信号 で使用したコマンド群を使用して、外部クロックを停止した。
図から、第二割込⑥がこないため、そこで停止していることが判る。(音も出ていない)

以上から発振器が不具合を起こした場合はこの事象で判る。
0x20: FM_TUNE_FREQ (FM選局コマンド)
0x40: AM_TUNE_FREQ (AM選局コマンド)
と言うことで実験してみることにする。
(2)確認試験は 3.1.2 GPO2出力直後のCTS割込信号 で使用したコマンド群を使用して、外部クロックを停止した。
図から、第二割込⑥がこないため、そこで停止していることが判る。(音も出ていない)

以上から発振器が不具合を起こした場合はこの事象で判る。
