2025年05月03日

UART互換シフトレジスタ

今回は簡単にマイコンの出力ポートを拡張できるシフトレジスタ、SN74LV8153を紹介したいと思います。


一般的にマイコン等のGPIOを拡張する際にはI2C接続のGPIO Expanderを多く使用することが多いと思います。また、出力もしくは入力の片方しか使用しない場合はパラレル入力用のシフトレジスタSN74HC165やパラレル出力のSN74HC595等を活用することが多いと思います。入出力混在の場合はI2C GPIO Expander、入力のみor出力のみといった片方向の場合はシフトレジスタという使い分が多いようです。

I2C接続のGPIO ExpanderやSN74HC165、SN74HC595等は少なくとも2本、現実的にはINTピンやロードピンを含めて3本以上の通信線が必要となります。少しでも占有ピン数を減らして出力を拡張する手段として、シフトレジスタとコンデンサや抵抗を駆使して1wire化する方法もありますが、信号タイミングの依存が強くなります。比較的タイミングに依存せず、容易に拡張可能なICとしてSN74LV8153があります。

SN74LV8153は一言でいえばUARTから8bitの出力ポートを操作できるExpander/シフトレジスタです。UARTのTX通信線、1本のみで8bitの出力操作を実現できます(必要に応じて別途Resetピンを接続してください)。また、3ビットのアドレス設定ピンを備えており、1本の通信ラインで最大8つのSN74LV8153を接続可能です。この場合、最大64bitまで拡張することができます。その他の特徴として、自動的にボーレートを検出するため、ボーレート設定が不要という特徴があります。


SN74LV8153の主な仕様は下記の通りです

・信号電源3V〜5.5V
・出力電源3V~13.2V
・出力電流最大40mA
・UARTフォーマット互換
・ボーレート2kbps~24kbps
 ※UARTであれば9600bpsや19200bps等の設定が汎用的

データシートに記載されていないものの、UARTから送信する際の仕様
・UARTデータ長8bit
・スタートビット 1bit
・ストップビット 1bit
・パリティビット None
・スタートビット後は必ずHighレベルである必要があるため、データは0bXXXXAAA1となる
 ※XXXXは出力のデータ、AAAは出力先ICのアドレス
・8つの出力を制御するため、1byteデータ0bXXXXAAA1を2回連続で送信する


PCにUSB-UARTSerial変換アダプタを接続して、SN74LV8153を操作した際、UARTはLSB Firstであることを失念しており、なかなか思い通りに動作せず、時間を要してしまいました。具体的には「スタートビット後は必ずHighレベルにする」ということは理解していましたが、MSB Firstだと思い込んでしまい、0b1AAAXXXXのデータを送信して、全く動作しないと悩んでしまいました。

UARTからデータを送信する際は下記のように「スタートビット後は必ずHighレベルにする」ため、UARTはLSB Firstなので0x80を加えるのでなく、0x01を加えるプログラムになります。

bytes[0] = 0x01 + (addr<<1) +((io_state&0x0F)<<4);
bytes[1] = 0x01 + (addr<<1) +((io_state&0xF0)<<0);



WebSerialAPIを活用して、ブラウザからUSB-UARTSerialを介してSN74LV8153を操作可能なツール、SN74LV8153 Test Toolを作成してみました。

SN74LV8153TessTool.png


EdgeやChorme等のWebSerialAPIに対応したブラウザからSN74LV8153の出力ポートを簡単に操作できます。


UARTはLSB Firstであることを失念して時間を要してしまいましたが、1本の通信線で出力を拡張できるSN74LV8153は非常に便利で面白いと思いました。出力だけでなく、入力に対応したICも出てくれば更に汎用性が上がって面白いですが、入力の場合はボーレート設定等が必要になるため、そのようなICは開発、販売されていないようです。少し残念です。

SN74LV8153の通信ボーレートが最大24kbpsでそこまで高速ではないため、高速な出力用途には向いていませんが、そこまで速度を要しない7SegやLED等の出力だけを拡張したいという場合には非常に便利だと思いました。今後、更に活用してみたいと思います。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2024年03月16日

SC18IM700とSC18IM704の差

以前にUART I2Cプロトコルブリッジのリニューアル版について紹介しました。UART I2Cプロトコルブリッジの旧バージョンはSC18IM700リニューアル版はSC18IM704となって別の製品として販売されています。

ハードウェアについてはピンアサインやGPIOモード、IO電圧、バッファサイズで変更があります。ただし、SC18IM700とSC18IM704でコマンドの互換があるものの、設定の一部は互換性がなくなっているようです。今回は変更となっているコマンド部分の差について紹介したいと思います。


■I2C CLK
 I2C CLKはデフォルトでは100kHzの設定になっており、特別な理由がない限りは変更する必要がありません。CLKを落としてより通信を安定させたい場合やCLKを上げて少しでも通信レートを上げたい場合等で変更する必要があります。

 設定自体のレジスタアドレスは同じですが、設定値が変更になっています。SC18IM700では2つのレジスタを合わせた値がCLKとして反映されてる仕様(I2CClkHとI2CClkLの差がない)でしたが、SC18IM704は2つのレジスタに16bitで設定した値がCLKとして反映される仕様(I2CClkHとI2CClkLを区別する)に変更されています。

 個人的にはI2CClkHに値を設定すると大幅にCLKが低下するため、I2CClkHの用途が限定的で以前の仕様の方が利便性は良かったと感じました・・・


・SC18IM700

700_CLK.jpg

・SC18IM704
704_CLK.jpg



■I2C CTO
 I2C通信のタイムアウト時間設定はデフォルトでは無効化されています。

 SC18IM700の場合、CTOのビットのみを有効化したするとデフォルトのタイムアウト時間は230msec程度です。

 一方、SC18IM704の場合はI2C_CLKも設定値に関係する仕様になっています。I2C_CLKがデフォルトの100kHzの場合、CTOのデフォルトは35msec程度とタイムアウト時間が短くなっています。また最大でも90msec(I2C_CLK=100kHz)程度で設定可能なCTO時間の範囲が狭くなっています。

 個人的にはI2C_CLKに依存せず、CTOの調整幅が大きいため、以前の仕様の方が利便性は良かったと感じました・・・



・SC18IM700

700_CTO.jpg

・SC18IM704

704_CTO.jpg



なお、SC18IM700とSC18IM704をソフトウェア側で区別するためにはSC18IM704に搭載された「Read version function ID」コマンドを利用することで確認することが可能です。アスキーで「VP」の文字列(0x56,0x50)を送信することで「SC18IM704 1.0.2」という感じで応答を確認することが可能です。応答がない場合はSC18IM700と区別できます。

後継のSC18IM704はIO電圧、バッファサイズ等、拡張が行われている一方でレジスタ設定については以前の仕様の方が利便性が良いと感じました。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2023年06月10日

RTC SD30XXシリーズ

以前に外付けRTC比較について紹介しましたが、昨今の円安の影響でより低価格かつ高精度なRTCについて調査していました。その中で要求を満たす中華製RTCがあったため、今回、紹介したいと思います。

深圳にあるwave社のRTC SD3031、SD3077、SD3078は温度補正機能付きのRTCで水晶発振子内蔵、精度±3.8ppm、電源/電池切り替え内蔵(電池と電源のピンがそれぞれある)、1個250円前後の低価格です。更に70byteのSRAMも利用できます。中華製なのでDigi-keyやMouser等での入手性は悪いものの、LCSCやAliexpress等で入手可能です。SD3031モジュールDigi-keyでも入手可能です。


SD3031、SD3077、SD3078のアドレスや内部レジスタ等は全て同じで、ピンアサインのみが異なります。他のRTCからの置き換えを想定してピンアサインの互換性のために3種類販売されています。ただし、既存のRTCとはソフトウェアでは互換性がなく、更にちょっと癖があるため、注意点についても紹介します。


■時刻書き込み時の注意点
・日時を書き込む際は先にCTRレジスタのWRTC1に1をセットし、続いてWRTC2,3に1をセットする必要
・hourは0~23時表現の場合は7bit目に1を立てて書き込む必要
・時刻、日付の7バイトを一括で書き込む必要
・書き込み後は先にWRTC2,3を0に戻してからWRTC1を0に戻す必要
・SRAMの書き込み時も日時同様にWRTCレジスタの書き換えが必要

■時刻読み込み時の注意点
・hourは0~23時表現の場合は7bit目の1を除く必要

■その他注意点
・汎用的なSOP8パッケージだが、NOR Flashで使用される幅が広い208milタイプ

一般的なRTCではレジスタに日時を書き込めばそのまま更新できますが、SD30XXの場合、事前にレジスタで書き込み有効化の処理が必要であり、手間がかかります。また、時間は24時間表記固定でなく、12時間モード/24時間モードの両方に対応している分、書き込みと読み込みに処理が必要です。これらを考慮して、USBシリアルI2C変換基板を使用したSD30XXシリーズ用のWebシリアルの設定/確認ツールを作成してみました。日本における入手性が悪い点と扱いにちょっと癖のあるRTCですが、低価格で高精度なのは非常に魅力的だと思いました。
posted by Crescent at 00:00| Comment(2) | TrackBack(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2023年02月25日

RTC用MEMS発振器

今回は安価に高精度を実現するMEMS発振器を紹介したいと思います。RTCの精度が悪い場合、RTCの時刻が頻繁にずれ、時刻調整やネットワークから時刻を取得する頻度を多くする必要があります。

マイコンで時刻や日付を保持するためのRTCを利用する場合、内蔵RTC機能を使用するか、外付けRTCを利用することになります。外付けの場合はRV-8803-C7やDS3231といった温度補正があるRTCを利用することで高精度に時刻保持することが可能ですが、部品が増え、コストが高くなりがちです。内蔵RTCの方が通信ラグがなく、比較的安価に実装することが可能です。ただし、精度は一般的な32.768kHz水晶発振子では20ppm前後とあまり期待できません。また、水晶発振子の外部負荷容量によっては更に精度が悪化する場合があります。一般的な水晶発振子の精度と時刻ずれの関係は下記の通りです。実際は昼夜の温度変化、季節の温度変化の影響、負荷容量によって更に大きくずれることが想定されます。

20ppmの場合、1年で11分前後
5ppmの場合、1年で3分前後
1ppmの場合、1年で30秒前後

今回は内蔵RTCで安価に高精度を実現する方法として、温度補正機能内蔵のMEMS発振器、SiT1552を紹介したいと思います。23年2月時点で1個200円~300円で温度補正機能を内蔵し、5ppmの精度を実現しています。データシートを見る限り、SiT1552AC-JEでは5ppm以内を謳っており、実力値としては1~2ppm前後あるようです。また、1.5V~3.63Vの広い電源範囲と1uA以下の消費電力でRTC用途にも最適です。

32.768kHzの水晶発振子を接続する代わりにXINにSiT1552のクロック出力を接続し、電源を供給して使用します。XOUTは未接続にします。マイコン側に水晶発振子か、発振器の設定パラメータがある場合は発振器に変更します。水晶発振子と異なり、MEMS発振器はそのままクロックが出力されます。そのため、負荷容量の調整や配線長を水晶発振子ほど考慮しなくてもよく、設計負荷が減ります。

SiT1552はCSPパッケージで非常に小さく、そのままでは扱いにくいため、ブレイクアウト基板を設計してみました。

osc1.jpg

osc2.jpg

実際にSiT1552を実装して、使い勝手が良ければまた、製品として提供を開始する予定です。今回は温度補正機能付きのMEMS発振器を利用することで比較的安価に内蔵RTCで高精度を実現する方法を紹介しました。内蔵RTCで安価に高精度を実現する方法として、今回紹介した方法の他にマイコン内蔵の温度計を使用して温度補正する方法もありますが、水晶発振子毎の温度特性のばらつきもあるため、調整が難しいのが難点です。RTCの部品を減らしつつ、より低コストに高精度を実現したいという場合に最適だと思いました。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする

2022年11月12日

BLE5モジュールV2

プログラミングなしで簡易なコマンドを用いてBLE通信をすることが可能なモジュールがSilicon Labs社からWireless Xpress BGX13シリーズとして2018年から提供されていました。しかしながら先日、2022年8月に生産完了予定(生産終了は2023年3月予定)が発表されました。

BGX13シリーズは発売から4年程度経過しており、生産完了もやむを得ずという状況ですが、BGX13シリーズの上位として発売されたBGX220シリーズは2021年に発表されてから1年ほどでBGX13シリーズと一緒に生産終了となりました。WiFiモジュールでも生産完了になっており、方針変更で無線系のXpressシリーズから撤退となったようです。上位版のBGX220シリーズも生産完了となり、後継機種も販売されないことから既存のユーザに対する影響を考慮し、BGXシリーズについてはLaird社からLyraシリーズとしてBGXシリーズと同じハードウェアとXpressファームウェアが提供されることが分かりました。今回はBGXシリーズとLyraシリーズの違いについて調査した結果(アンテナ内蔵Pシリーズを対象)を紹介したいと思います。

BGXシリーズとLyraシリーズの違いについてはLyraシリーズの公式サイトにBluetooth Xpress (BGX) Migration Guideとして公開されています。詳細はそちらを参考にしてください。

lyra.jpg

■ハードウェア
ハードウェアとしてフットプリントは同じため、そのまま同じフットプリントとして利用できます。一方、ピンアサインはBGXシリーズとLyraシリーズで互換性がありません。LyraシリーズのピンアサインはBGX220に合わせたようで、BOOTピンが異なります。BGX13とはBOOTピンの他、電源やUARTのピンも異なります。

電源電圧については1.8V~3.3Vとなっており、最低2.4VのBGX13よりもより低電圧で動作できる仕様となっています。

■ソフトウェア
ソフトウェアについては互換性有ということのようです。ただ、BGXシリーズでは出荷時から既にXpressファームウェアが書き込まれた状態でしたが、Lyraシリーズは出荷時にXpressファームウェアは書き込まれておらず、ユーザ側で公開されているXpressファームウェアを書き込む必要があります。

ファームウェアはBOOTピンをGNDにした状態で電源投入させることでUARTから書き込むことが可能です。Github上でWindowsのコマンドラインからシリアルUARTを介してファームを書き込むための書き込みツールuart_dfu.exeが公開されています。uart_dfu.exeはUART-DFU_XXX-XXXXX.zipとして圧縮ファイルとして提供されています。

コマンドライン上から例えば下記のようにコマンドを実行するとファーム書き込みが可能です。

uart_dfu.exe COM8 115200 LYRA-P_Bluetooth_Xpress_UART.gbl

実際にファーム書き込みした際に分かった点として、書き込みツールuart_dfu.exeはUSBシリアル変換のGND, TX, RXの他にCTS、RTSの配線も必要な点です。通常のマイコンとの通信等ではGND, TX, RXだけでも十分ですが、uart_dfu.exeの書き込みツールはCTS、RTSの信号変化も確認しているようで手持ちのGND, TX, RXだけのUSBシリアル変換アダプタでは動作しませんでした。GND, TX, RXの他にCTS、RTS端子も備えた別のUSBシリアル変換アダプタを使用するとすんなり書き込むことができました。

Wireless XpressシリーズはUARTシリアルで設定変更できるため、プロトコル実装なしでマイコン側のファーム書き換えのみで様々な機能を実現できるというのは非常に魅力的です。BGXシリーズは生産完了になったものの、Laird社からLyraシリーズとして今後もある程度入手できるようで安心しました。
posted by Crescent at 00:00| Comment(0) | TrackBack(0) | 電子部品 | このブログの読者になる | 更新情報をチェックする