温湿度センサPmodボードUS082-HS3001EVZ(ルネサス QuickConnect IoT)ってRX SmartConfiguratorのCG Componentでは素朴に扱えない(cannot be used for it)?

こんにちは。NoMaYです。

ルネサスさんの温湿度センサPmodTMボード(ルネサス クイックコネクトIoT)を買ったのでTB-RX671で触ろうとしています。搭載されている温湿度センサHS3001のデータシートを見たところ、測定開始トリガを掛けるI2Cコマンドは以下の画面コピーのフォーマットになっていて、I2Cのデータライトなのですがデータ数が0の形になっていました。他方、RXスマートコンフィグレータが生成したCGコンポーネントのソースでは、以下の画面コピーの通り、I2C通信API関数内でデータライトのデータ数が0の場合は、何もしない、という処理になっていました。(おそらく、このエラーチェック?は後付の処理で、本来はエラーコードを返すところだけれど、既に戻り値がvoidの関数として規定されていたので、こういう処理になったのだろう、という気がします。)

何か、ひと工夫しないと扱えない、っぽい気配です、、、(だから温湿度センサなのに重厚?ミドルウェアがやたら念入りに用意されていたのかなぁ、、、)

温湿度センサHS3001のデータシートの画面コピー
www.renesas.com/jp/ja/document/dst/hs300x-datasheet


RXスマートコンフィグレータが生成したCGコンポーネントのソースの画面コピー


[関連リンク]

US082-HS3001EVZ 温湿度センサ PmodTM(ルネサス クイックコネクトIoT) 製品ページ
www.renesas.com/jp/ja/products/sensor-products/humidity-sensors/us082-hs3001evz-relative-humidity-sensor-pmod-board-renesas-quick-connect-iot

[追記]

ちなみに、TB-RX671のPmod TMタイプ6Aの標準実装のコネクタの配線ですけど、こういう配線になってました。

TB-RX671の回路図の画面コピー
www.renesas.com/jp/ja/document/sch/target-board-rx671-schematic


TB-RX671 製品ページ
www.renesas.com/jp/ja/products/microcontrollers-microprocessors/rx-32-bit-performance-efficiency-mcus/rtk5rx6710c00000bj-target-board-rx671

  • チョコです。

    >測定開始トリガを掛けるI2Cコマンドは以下の画面コピーのフォーマットになっていて、I2Cのデータライトなのですがデータ数が0の形になっていました。

    それには、気が付いてRL78のI2CのAPIで何とかできないかと検討したことがありました。

    結論としては、データ数0は受信時のみエラーとしておくことで対応可能でした。

    書き込みでのスレーブアドレス送信後に、送信データ数をチェックしてそこで残りデータ0で通信を終了しすればそれだけで済むはずです。残り0でなければ、データを送信するだけで済みますので。

    追伸

    G14FPBのサンプルコードでHS3001を制御しているものがありました。そこでは以下のように記載されていました。

  • チョコさん、こんにちは。NoMaYです。

    > 追伸
    > G14FPBのサンプルコードでHS3001を制御しているものがありました。そこでは以下のように記載されていました。

    リプライありがとうございます。ということは、以下のアプリケーションノートをRX671へ移植すれば良いのかな、という思惑が浮かび、ダウンロードしてソースを見たところ、チョコさんのIICライブラリスタイルのコード生成機能の初期化処理だけ利用して、後は全て自前で作り込んでいくというスタイルのコードでした。

    シェルティさんがやりたいと言っているのは、FITのAPIを(必要なら)拡張して、薄皮を被せるだけでArduino APIを実装出来るように、ということですね。そうすることで、全てのマイコンでArduino APIが使えるようになるかも?(あと、FITだけでなく、RL78のFITライク検討中新フレームワークも?そして、そのArduino APIもスマートコンフィグレータから生成出来るようになったりするかも???、、、)

    アプリケーションノート RL78/G14 I2C バス制御(Arduino API)

    要旨

    本アプリケーションノートでは、RL78/G14 Fast Prototyping Board (FPB) を用いてArduino 言語のようなプログラム記述でセンサ (HS3001) とLCD 表示器を、I2C バスを介して制御する方法を説明します。

    対象デバイス

    RL78/G14


    PDFファイル
    www.renesas.com/jp/ja/document/apn/rl78g14-controlling-i2c-bus-arduino-api-rev100

    ZIPファイル
    www.renesas.com/jp/ja/document/scd/rl78g14-controlling-i2c-bus-arduino-api-rev100-sample-code
     

  • チョコです。

    RL78のコード生成の「コード生成プリビュー」で確認してみましたが、IICA0割り込み処理の部分を抜き出してみましたが、下に示す赤い四角で囲んだようにスレーブアドレス送信完了時の割り込みでは、送信データ数をチェックして0ならば、"r_iica0_callback_master_sendend()”関数を呼び出して抜けるようになっている構造は同じです。

    従って、同じように、上側のAPIを少しいじるだけで対応できますよ。

    以上

  • チョコさん、こんにちは。NoMaYです。

    実は、私は、HS3001が人生で2個目のI2Cデバイスなのですが(1個目はRX72N Envision Kit搭載のISL29034ですが)、この測定開始トリガを掛けるI2CコマンドのようにI2Cのデータライトでデータ数が0の形のものは、そこそこ見かけるI2Cコマンドなのでしょうか?

    そこそこ見かけるものであるなら、RXスマートコンフィグレータのCGコンポーネントで受け付けるようにして欲しいところですが、世のなか広しとは言え、このHS3001(とそのファミリ製品)ぐらいであるなら、自前で何とかするのが妥当なところなのでしょう、とも思うのです。

    #RX Driver PackageでHS3001制御ミドルウェア(FITと共存するFSP互換ミドルウェア)が提供されていることは知っていて、それでもちょっと思ったことです。

  • チョコです。

    I2CではシリアルEEPROMから始まり、BME180、BME280、BMP280、HDC1080、照度センサなどを使いましたが、スタンバイ解除にデータ数が0のデータライトを使うものはありませんでした。(これ以外にかふぇルネで、他の人の開発をサポートしてきていますので2桁にはなっていると思います。)

    ただ、データ数が0の書き込みはI2Cの処理としては禁止されてはいないし、処理自体も矛盾しません。私のライブラリでは、転送起動時のデータ数のチェックはかなり前からやっていないですね。

    受信時のデータ数の0はI2Cバスとしては、無理があるので、これだけはチェックしといた方がいいかもしれません。

    以上

  • チョコです。

    >シェルティさんがやりたいと言っているのは、FITのAPIを(必要なら)拡張して、薄皮を被せるだけでArduino APIを実装出来るように、ということですね。

    FITのAPIがどのようになっているかが分かりませんが、従来のI/Fの延長ではArduino APIを実装できないと思います。

    基本的に、Arduinoでは、送受信のバッファ・メモリをAPI側で準備しています。送信では、処理を分割してブロッキング処理になっているようです。受信については、ノン・ブロッキングになっていて、受信したデータ数を確認しながら読み出せるようなAPIになっているようですね。

  • チョコさん、こんにちは。NoMaYです。

    実は、FITは、例えばUARTであればデフォルトは受信リングバッファ(も送信リングバッファも)あり、です。そういうFITライクなものを、RL78にも導入しようとしているのだと思うのです。マイコンでクラウドに接続しようとすると、どうしてもROMが巨大になってしまって、そういうROMサイズではデフォルトでそうなっていても、あまり気にならない、むしろ、そういう業務を受注するような開発者さんにとっては何で最初から実装されてないの?と不便に思っている、という話も多い(のではないか)というのが背景にあると思います。

  • こんにちは。NoMaYです。

    温湿度センサHS300xに加えて、気体流量センサFS2012やガスセンサZMOD4410/ZMOD4510のセンサミドルウェアが追加されたRX Driver Package V1.32がリリースされていたので、CS+での単体RXスマートコンフィグレータでダウンロードするにはどうするのか、ちょっと試してみました。以下、画面コピーです。








     

  • チョコです。

    >実は、FITは、例えばUARTであればデフォルトは受信リングバッファ(も送信リングバッファも)あり、です。

    昔から調歩同期通信ではよくバッファは使われていますし、UARTにFIFOが内蔵されているものも見かけます。

    しかし、I2Cではアービトレーション負けがあったりするので、制御が面倒でしょうね。また、HS3001はデータ準備完了の確認をデータの最初の2バイトの中にあるフラグで確認するようなので、バッファが入るとおかしくなりそうですね。

    そもそも、完了していないときに4バイトを読み出したら、どうなるのかがデータシートからは読み取れませんでした。結局、G14FPBでやっているように時間で管理するのが簡単な対応かもしれません。

    シリアルEEPROMでも書き込み完了を、ストップコンディション発行後すぐにポーリングするといつまでたっても完了にならないことがありました。ここらをどう実現するのかは、時間待ち以外は難しいようです。

     

  • こんにちは。NoMaYです。

    くだんのエラーチェック?を無効化して、TB-RX140+CS+で温湿度を測定することが出来ました。(ただ、生成されたソースコードのユーザ記述部外を変更することになりますのでソースコードを再生成すると元に戻ってしまいますので何かしら対処しておくことが良いです。) 以下、画面コピーです。(RX140はFPU内蔵ですので、無造作にfloatを使ってしまってもコードサイズとか実行速度とか気にしなくても良さそうですね。もっとも、他にもprintfとかも無造作に使ってしまっていますけれども。)




    [追記]

    ちなみに、TB-RX140のPmod タイプ6Aの標準実装のコネクタの配線ですけど、こういう配線になってました。

    TB-RX140の回路図の画面コピー
    www.renesas.com/jp/ja/document/sch/target-board-rx140-schematic-rev100


    TB-RX140 製品ページ
    www.renesas.com/jp/ja/products/microcontrollers-microprocessors/rx-32-bit-performance-efficiency-mcus/rtk5rx1400c00000bj-target-board-rx140
     

  • こんにちは。NoMaYです。

    今、別スレッドですが、ルネサス クイックコネクトIoT センサミドルウェアを使用したサンプルプログラムの使用ROM/RAMサイズを調べ始めようとしていて、その前に、こちらのスレッドのルネサス クイックコネクトIoT センサミドルウェアを使用しないやり方ではどうなのかちょっと調べてみました。こちらのスレッドのものは初心者フォーラムへ以前投稿していたサンプルプログラムへ追加するつもりでいましたので、コンパイル時の最適化はレベル0にし、メッセージ出力にprintfを使用するなどしていましたが、それを、最適化をレベル2、printfは使用しないといった点を変えて、その上で使用ROM/RAMサイズは以下の通り(画面コピーあり)でした。

    (参)別途調べ始めようとしている ルネサス クイックコネクトIoT センサミドルウェアを使用したサンプルプログラム での使用量

    ROM / RAM (bytes)

    RX & CC-RX?        RA & GNUARM         RL78 & CC-RL?      RE & GNUARM
    24,863 / 7,941      6,164 / 1,740       4,046 / 100         74,472 / 7,560

    ROM/RAMにどういうものが計上されているかは今後調べるつもりです
    (RAを除き、各CPUファミリのソフトウェア開発プラットフォームのネイティブAPI⇔FSP互換APIの変換層が含まれる、でしょう)


    (本)こちらのスレッドの  ルネサス クイックコネクトIoT センサミドルウェアを使用しない やり方での使用量


    RX140 (TB-RX140)

    PROGRAM SECTION:  000010a0 Byte(s)  4,256 バイト(10進数)
    ROMDATA SECTION:  000006cc Byte(s)  1,740 バイト(10進数)
    RAMDATA SECTION:  000006d9 Byte(s)  1,753 バイト(10進数)

    RX23W (TB-RX23W-module)

    PROGRAM SECTION:  00001163 Byte(s)  4,451 バイト(10進数)
    ROMDATA SECTION:  000006cc Byte(s)  1,740 バイト(10進数)
    RAMDATA SECTION:  00000725 Byte(s)  1,829 バイト(10進数)

    RX671 (TB-RX671)

    PROGRAM SECTION:  00001b01 Byte(s)  6,913 バイト(10進数)
    ROMDATA SECTION:  00000716 Byte(s)  1,814 バイト(10進数)
    RAMDATA SECTION:  00000927 Byte(s)  2,343 バイト(10進数)

    RXスマートコンフィグレータ V2.11.0 (BSPモジュール V6.20) + CC-RX V3.03 を使用
    ソースはチョイ変しただけなので実はprintfサポートの為の下位階層コードが残っています
    スマートコンフィグレータの設定は変えていないので入出力ポート操作のコードを含みます
    ROMDATAは ベクタテーブル(1,024バイト) を含みます
    RAMDATAは スタック領域(1,024バイト) を含みます


    以下、資料としてマップファイルを添付しておきます。

    HS3001_RX_MCU_SMC_CG_I2C_Master_map_files.zip
    I2C_Master_TB_RX23W_module.map
    I2C_Master_TB_RX140.map
    I2C_Master_TB_RX671.map

    なお、コンパイル時の最適化レベルやソースを変更する前のプロジェクトのファイル一式は以下にあります。

    github.com/NoMaY-jp/RX_SmartConfigurator_examples_RXTB_CSplus/tree/ccc1265
    60_I2C_Master/tb_rx23w_module/
    60_I2C_Master/tb_rx140/
    60_I2C_Master/tb_rx671/

    以下、CS+でのビルド時の画面コピーです。

    RX140 (TB-RX140)


    RX23W (TB-RX23W-module)


    RX671 (TB-RX671)

     

  • こんにちは。NoMaYです。

    RL78/G14 Fast Prototyping BoardのサンプルプログラムにPmod HYGRO (TI HDC1080)の温湿度センサを使ったものがあったことを思い出したのでダウンロードしてみました。サンプルプログラムにはPmod OLEDへの表示機能も含まれていましたが大まかに取り除いてシンプルに温湿度センサの読み出し部分だけにしてみました。そしてRL78/G14 Fast Prototyping Board+Renesas HS3001でのルネサス クイックコネクトIoT センサミドルウェアを使用したサンプルプログラムの使用ROM/RAMサイズと比較してみました。(動作未確認) 結果は以下の通りでしたが、素朴には、TI HDC1080を採用した方がお得そう、に見えてしまいますよね、、、そちらの方が少ないROM/RAMで使えそう、に見えてしまうのだから、、、う~ん、、、

    TI HDC1080温湿度センサの場合 (今回CS+にてビルド)

    PROGRAM SECTION:  000006c7 Byte(s)   1735 バイト(10進数)
    ROMDATA SECTION:  000001a9 Byte(s)    425 バイト(10進数)
    RAMDATA SECTION:  00000019 Byte(s)     25 バイト(10進数)


    Renesas HS3001温湿度センサの場合 (別スレッドから引用)

    PROGRAM SECTION:  00000d65 Byte(s)   3429 バイト(10進数)
    ROMDATA SECTION:  00000320 Byte(s)    800 バイト(10進数)
    RAMDATA SECTION:  00000060 Byte(s)     96 バイト(10進数)

     
    RL78/G14 Relative Humidity Sensor (Pmod HYGRO) Device Sample Rev.1.01 アプリケーションノート

    PDFファイル
    www.renesas.com/jp/ja/document/apn/rl78g14-relative-humidity-sensor-pmod-hygro-device-sample-rev101

    ZIPファイル
    www.renesas.com/jp/ja/document/scd/rl78g14-relative-humidity-sensor-pmod-hygro-device-sample-rev100-sample-code

    RL78/G14 Fast Prototyping Board 製品ページ
    www.renesas.com/jp/ja/products/microcontrollers-microprocessors/rl78-low-power-8-16-bit-mcus/rl78g14-fast-prototyping-board-rl78g14-fast-prototyping-board

    以下、CS+でのビルド時の画面コピーです。(デフォルト最適化 & ソースはPmod OLEDへの表示機能など取り除いた後)



    [追記]

    ちなみに、未使用の変数/関数を削除する最適化を行っても、以下の通り余りサイズは変わりませんでした。

    TI HDC1080温湿度センサの場合 (今回CS+にてビルド)

    実施前

    PROGRAM SECTION:  000006c7 Byte(s)   1735 バイト(10進数)
    ROMDATA SECTION:  000001a9 Byte(s)    425 バイト(10進数)
    RAMDATA SECTION:  00000019 Byte(s)     25 バイト(10進数)

     
    実施後

    PROGRAM SECTION:  00000652 Byte(s)   1618 バイト(10進数)
    ROMDATA SECTION:  000001a7 Byte(s)    423 バイト(10進数)
    RAMDATA SECTION:  00000017 Byte(s)     23 バイト(10進数)

     

  • こんにちは。NoMaYです。

    ちょっと好奇心から、先日の投稿にて改変してシンプルに温湿度センサの読み出し部分だけにしたRL78/G14 Fast Prototyping Boardのサンプルプログラムを、CC-RLではなくてCC-RXで、つまり、RL78(S3)命令セットではなくてRXv2(FPUあり)命令セットで、ビルドしてプログラムサイズを比較してみました。結果はRXv2(FPUあり)命令セットの方がRL78(S3)命令セットよりプログラムサイズが小さくなるようでした。

    もちろん、RL78アセンブラソースはCC-RXではアセンブル出来ませんのでビルドから除外して、また、__nearキーワードやビルトイン関数呼び出し等は少し小細工して、ビルドを無理矢理通すようにしています。あと、比較目的の為に、RL78オンチップデバッグ設定は無効にしてあります。それから、未使用の変数/関数を削除する最適化は施していません。

    [2021/10/21 14:28] プロジェクトのファイル一式を以下のzipファイルに固めました。prnファイルやlstファイルも入れました。

    RL78G14_FPB_PmodHYGRO_CCRX_RX140_20211021.zip
    RL78G14_FPB_PmodHYGRO_CCRL/
    RL78G14_FPB_PmodHYGRO_CCRX_RX140/

    数値は以下の通りです。

    CC-RLでビルドした場合

    PROGRAM SECTION:  00000629 Byte(s)   1577 バイト(10進数)
    ROMDATA SECTION:  0000009f Byte(s)
    RAMDATA SECTION:  00000019 Byte(s)

     
    CC-RXでビルドした場合

    PROGRAM SECTION:  00000480 Byte(s)   1152 バイト(10進数)
    ROMDATA SECTION:  0000040d Byte(s)
    RAMDATA SECTION:  0000001d Byte(s)

     
    以下はMAPファイルの画面コピーです。

    CC-RLでビルドした場合


    CC-RXでビルドした場合


    [追記]

    CC-RXでビルドしたものですが、以下の画面コピーの通り、割り込みルーチンもベクタに割り付けられています。