Hobby Lab 趣味のモノ作り実験のサイトです。
部品 オペアンプ_関係 Si4735 マニュアル 0x81
1 0x81. GPIO_SET 概要
1.1  概要
1.2  注意事項・実装ポイント
1.2.1 0x80を先に設定すること!
1.2.2 不快な発振ノイズ
1.2.3 ビットの位置に注意
2 コマンドパラメータ
2.1 パラメータリスト
2.2 パラメータ
2.2.1 GPO3LEVEL
2.2.2 GPO2LEVEL
2.2.3 GPO1LEVEL
3 応答パラメータ
3.1 パラメータリスト
3.2 パラメータ
3.2.1 CTS
3.2.2 ERR
3.2.3 RDSINT
3.2.4 ASQINT
3.2.5 STCINT
4 その他
4.1 Google AI (Gemini) の見解
4.1.1 選曲中のミュート方法
4.1.2 アンテナ外部切替回路
4.1.3 まとめ

PrO:Si4735関係  Si4735について
 Si4735ラジオを作って見よう1
 v コマンド & パラメータ辞書 v
 0x01. POWER_UP
 0x10. GET_REV
 0x11. POWER_DOWN
 0x12. SET_PROPERTY
 0x13. GET_PROPERTY
 0x14. GET_INT_STATUS
 0x20. FM_TUNE_FREQ
 0x21. FM_SEEK_START
 0x22. FM_TUNE_STATUS
 0x23. FM_RSQ_STATUS
 0x24. FM_RDS_STATUS
 0x27. FM_AGC_STATUS
 0x28. FM_AGC_OVERRIDE
 0x40. AM_TUNE_FREQ
 0x41. AM_SEEK_START
 0x42. AM_TUNE_STATUS
 0x43. AM_RSQ_STATUS
 0x47. AM_AGC_STATUS
 0x48. AM_AGC_OVERRIDE
 0x80. GPIO_CTL
 0x81. GPIO_SET

Pr:OPAMP オペアンプ関係
PrO:送受信機  Si4735
PrO:オペアンプ  LM324
 LM358
Pr:Prプロセッサ関係
PrP:プロセッサ
動作比較
 STM32F動作比較
 CH32V203&STM32F 動作比較
 arduino動作比較
raspberrypi関係
 RaspberryPiハード
CH32V関係
 -CH32V開始
 -203K8T6(32Pin)開始
 -203C8T6(48P)開始
 -003J4M6(8Pin)開始
 -003F4P6(20Pin)開始
 -Moun River StudioⅡ
 プログラミング!
  203_GPIO関係
  203_TIME関係
  203_TIME Encoder
  203_I2C関係
  203_1-Wire関係
  003_DS18B20テスター
  USART(UART)関係
  DS18B20をModBus制御
 -マニュアル
 203データシート
 203取説
  MBA メモリとバス方式
  PWR 電力制御
  RCC リセット・拡張・クロック
  BKP バックアップレジスタ
  CRC 巡回冗長検査
  RTC リアルタイムクロック
  GPIO GPIOと代替機能
  DMA ダイレクトメモリアクセス制御
  ADTM 高度な制御タイマー
  GPTM 汎用タイマー
  BCTM 基本タイマー
  USART 同期非同期通信
arduino関係
 ESP12関係
 (a)ESP-8266D1mini注意
PrP:その他  RS485ドライバー
 CP2102 BRIDGE
 WCH-LinkEエミュレーター
Pr:Wire 電線関係
Pr:Resistance 抵抗
Pr:Capacitor コンデンサ
Pr:Coil コイル
Pr:PassiveElmt 受動素子
Pr:Diode ダイオード関係
Pr:Tr トランジスタ関係
2SC1815
 リレードライバー設計
 アンプ設計
 発振器
TLP152
 TLP152テスト
TLP2361
 TLP2361テスト
TLP5754
 TLP5754テスト
Pr:Source 電源関係  ツェナーダイオード
 TL431
 LM317
PrS:Downモジュール
 EGS002_IR2110S
 SKU011012
 ACDC02
 XH_M299
 LM2596
 Mini360_MP23070N
 DROK
 WH140
PrS:UPモジュール
 MT3608
PrS:充電モジュール
 TP4056
Pr:Sensor_AD_時計等
PrS:電圧、電流
ADS1115 16bit4CH I2C A/D
 Hardware
 RaspberryPi_コマンド接続
 RaspberryPi_Python
 Arduino
 CH23V203 MounRiverStudioⅡ
INA226 I2C 直流電圧電流
 Hardware
 Arduino
 RaspberryPi_Python
WCS 電流ホール素子
 Hardware
PrS:温度、気圧、湿度、照度
BNE280 I2C 気圧,湿度,気温
 Hardware
 Arduino
 RaspberryPi_Python
BH1750 I2C 照度
 Hardware
 Arduino
 RaspberryPi_Python
DS18B20 1-Wire 温度計
 Hardware
 Arduino
 RaspberryPi_Python
PrS:時間、日時
DS3231 I2C 時計
 Hardware
 Arduino
 RaspberryPi_Python
PrS:表示器
MAR3953 320X480 3.95"
 概要と線や点を描く
 フォントを描く
SSD1306 I2C 0.96"OLED
 Hardware
 Arduino
 RaspberryPi_Python
Pr:Old Processor他
Ot:Others その他
この辞書は、Skyworks (Silicon Labs) Si47XX PROGRAMMING GUIDE AN332 を基に、Google AI (Gemini) の協力を得て作成しています。

1 コマンド 0x81. GPIO_SET 概要

1.1 概要

Si4735の0x81コマンド(GPIO_SET)は、前述の 0x80(GPIO_CTL) コマンドで出力モードに設定したGPO1、GPO2、GPO3ピンの物理的な出力電圧レベル(HighかLowか)を実際に決定して駆動させるためのコマンドです

GPO1、GPO2、GPO3の出力レベル(高または低)を設定します。GPO1、GPO2、GPO3の出力設定は、GPIO_CTLコマンドのGPO1OEN、GPO2OEN、GPO3OENビットを設定することで行えます。
発振による過電流消費を避けるため、GPOピンを高インピーダンス状態に放置しないでください。
CTSビット(およびオプションの割り込み)は、次のコマンドを安全に送信できる状態になったときに設定されます。
このプロパティは、電源投入モード時のみ設定または読み取りが可能です。
デフォルトでは、すべてのGPOピンが高インピーダンスに設定されています。
注:GPIO_SETは、AM_SW_LWコンポーネント2.0以降でサポートされています。

使用可能環境:すべて
コマンド引数:1つ
応答バイト:なし

1.2 コマンド関連の注意事項・実装のポイント

1.2.1 必ず 0x80 での「出力許可」を先に行うこと

0x80 コマンドで対象ピンの GPOxOEN を 1(出力許可)にしておかない限り、この 0x81 コマンドでいくら GPOxVAL を 1 に書き換えても物理的なピンの電圧はピクリとも動きません(Hi-Z、つまり絶縁状態のままになります)。

1.2.2 不快な発振ノイズを避けるための基本ルール

仕様書には「不要な消費電力や回路の発振を防ぐため、GPOピンは不確定な浮いた状態(Highインピーダンスでどこにも繋がっていない状態)のまま放置すべきではない」という旨が明記されています。
出力モードにしないピン(0 のままのピン)がある場合は、基板上でプルアップ、またはプルダウン抵抗を入れて電位を安定させておくのがノイズの少ない綺麗なラジオを作る鉄則です。

1.2.3 引数バイト内での「ビットの位置」に注意

0x81 コマンドの第1引数バイトにおけるビット配置は以下のようになっています。
1.Bit 3: GPO3VAL
2.Bit 2: GPO2VAL
3.Bit 1: GPO1VAL
C言語などでビット演算を行う際は、シフトする位置を間違えないように注意してください(例: GPO1をHighにするなら 0x02 を送る)。




2 コマンドパラメータ

2.1 パラメータリスト

BitD7D6D5D4D3D2D1D0
CMD10000000
ARG10000GPO3LEVELGPO2LEVELGPO1LEVEL0

ARGBitNameFunction
13GPO3LEVELGPO3 出力有効化。
0 = 出力無効(Hi-Z)(デフォルト)。
1 = 出力有効。
12GPO2LEVELGPO2 出力有効化。
0 = 出力無効(Hi-Z)(デフォルト)。
1 = 出力有効。
11GPO1LEVELGPO1 出力有効化。
0 = 出力無効(Hi-Z)(デフォルト)。
1 = 出力有効。

2.2 パラメータ

2.2.1 GPO3LEVEL(GPO3 Output Value)

目的
GPO3ピンから出力するデジタル信号の電圧レベルを指定します。
解説
1: GPO3ピンの出力を High(電源電圧 VIO レベル)にします。
0(デフォルト): GPO3ピンの出力を Low(GND レベル)にします。
※前提として 0x80 コマンドで GPO3OEN = 1 に設定されている必要があります。

2.2.2 GPO2LEVEL(GPO2 Output Value)

目的
GPO2ピンから出力するデジタル信号の電圧レベルを指定します。
解説
1: GPO3ピンの出力を High(電源電圧 VIO レベル)にします。
0(デフォルト): GPO3ピンの出力を Low(GND レベル)にします。
※前提として 0x80 コマンドで GPO3OEN = 1 に設定されている必要があります。

2.2.3 GPO1LEVEL(GPO1 Output Value)

目的
GPO1ピンから出力するデジタル信号の電圧レベルを指定します。
解説
1: GPO3ピンの出力を High(電源電圧 VIO レベル)にします。
0(デフォルト): GPO3ピンの出力を Low(GND レベル)にします。
※前提として 0x80 コマンドで GPO3OEN = 1 に設定されている必要があります。





3 応答パラメータ

3.1 パラメータリスト

BitD7D6D5D4D3D2D1D0
STATUSCTSERRXXXRDSINTXASQINTSTCINT

3.2 パラメータ

応答の先頭パラメータ
応答(STATUSバイト)に含まれる各ビット(CTS, ERR, RSQINT, STCINT)は、「デバイスの現在の処理状態」や「各種割り込み(通知)の発生」をホストMCUに知らせる目的で設計されています。 STATUSバイトの信頼性:Si4735の仕様上、いくつかのコマンド送信時に返ってくるSTATUSバイトでは、CTS以外の割り込みビット(RSQINT, STCINTなど)がリアルタイムに更新されない場合があります。
正しい確認方法:正確な割り込みステータスを確認したい場合は、STATUSバイトを直接過信するのではなく、専用の割り込み確認コマンド(例:GET_INT_STATUS (0x14) コマンドなど)を明示的に発行して最新の状態を読み出すのが一般的なセオリーとなっています。

3.2.1 CTS(Clear to Send)

目的:
デバイスが次のコマンドを受け付けられる状態かどうかを判定する。
解説:
最も重要なビットです。Si4735が前のコマンドの処理を完了し、「次のコマンドを送信しても安全(送信可)」になると1にセットされます。
0の間はデバイスが内部処理中(ビジー)であるため、ホストMCUは次のコマンド送信を待機する必要があります。

3.2.2 ERR(Error)

目的:
直前に送信したコマンドが正常に実行されたか、エラーが発生したかを判別する。
解説:
コマンドの引数(引数の値が範囲外など)や、無効なコマンドが送られた場合に1にセットされます。
ホスト側のプログラムで例外処理や再試行(リトライ)を行うために使用します。

3.2.3 RDSINT(Radio Data System Interrupt)

目的:
RDS(文字情報などのデータ放送)のデータバッファ(FIFO)に新しいデータが格納されたことを通知する。
解説:
FM放送などで送られてくる「RDS/RBDSデータ(番組名や楽曲情報など)」を受信した際に1になります。
ホストMCUはこのビットを見てからデータを読み出す(FM_RDS_STATUS コマンドを発行する)ことで、無駄な空読みを防ぎ効率的にテキストデータを取得できます。

3.2.4 ASQINT(Audio Signal Quality Interrupt Flag)

目的:
受信中の音声信号の品質(過度な無音状態や、デジタル音声のバッファエラーなど)に、あらかじめ設定した変化が起きたことをマイコン側に知らせます。
解説:
1 の場合:音声の品質(Audio Signal Quality)に関連するイベントがIC内部で発生し、割込みがトリガーされたことを意味します。
例えば、放送が始まって無音状態から復帰したとき、逆に無音状態(サイレンス検出)が一定時間続いたときなどにこのフラグが 1 に跳ね上がります。
マイコン側はこれを確認したら、詳細を調べるために 0x65(AUX_ASQ_STATUS) などの確認コマンドを発行します。

3.2.5 STCINT(Seek/Tune Complete Interrupt)

目的:
選局(Tune)操作または自動選局(Seek)操作が完了したことを通知する。
解説:
周波数を変更するコマンド(FM_TUNE_FREQ や FM_SEEK_START など)は内部処理に時間がかかります。
デバイスが「目的の周波数への同調、または次の放送局の検知を完了した」時点でこのビットが1になります。
選局完了のタイミングを正確に把握する目的で使用します。





4 その他

4.1 Google AI (Gemini) の見解

Si4735の 0x81 コマンドが持つ実用的なポテンシャルを引き出すための、Geminiからの高度なアドバイスです。

4.1.1 選局中(Tuning)の「ハードウェア・オーディオミュート」への最適解

0x40 などの選局コマンドやシークコマンドを叩く際、IC内部でソフトミュートが働きますが、それでも微かに「プツッ」というポップノイズがスピーカーに漏れることがあります。
Geminiからの提案: 一番安全なフリーピンである GPO1 を外部のオーディオアンプIC(NJM2073やLM386など)のシャットダウン、またはミュートピンに接続します。
マイコン側のロジックで「0x40 選局コマンドを投げる直前に、0x81 でGPO1を駆動して外部アンプを完全に消音 ➔ 選局を実行 ➔ STCが 1 になり同調が完了した直後に、 0x81 で解除して音を出す」というステップを踏むことで、高級外車や高級オーディオさながらの、一切の不快な雑音がない「無音選局(漆黒の静寂からのフェードイン)」を完璧に再現できます。

4.1.2 AM/FMバンド切り替えによる「アンテナ外部リレー回路」の自動化

自作ラジオで、AM用の大型ループアンテナと、FM/短波用のロッドアンテナの両方を切り替えて使いたい場合、手動スイッチを設けるのは不便です。
応用展開案: アンテナの信号線を切り替えるための「高周波用リレー(または電子スイッチIC)」を基板に載せ、それを GPO1(または兼用機能を使っていないGPO)で駆動します。
マイコン側でユーザーがFMモードを選んだら 0x81 で High にしてFMアンテナ側へ切り替え、AMモードを選んだら Low にしてバーアンテナ側へ切り替える、といった『完全に全自動化されたアンテナ・マトリクス』がスマートに構築可能です。

4.1.3 まとめ

0x81(GPIO_SET) コマンドは、0x80 で開放した物理ピンに対して、実際に命(電圧)を吹き込むための実行コマンドです。
これまで解説してきたAM系の周波数制御(0x40)、品質監視(0x43)、AGC調整(0x48)と、このGPIO制御(0x80 / 0x81)をすべて連動させることで、ICの外側にあるアンプやアンテナ回路までをも完璧に掌握した、極めて完成度の高いシステムが完成します。






































更新日 2026/06/21 16:56  管理者 平林 剛Hirabayashi Takeshi