RL78G1C(R5F10JBCAFP)でサンプルを動かすには?

秋月などで買えるRL78G1C(R5F10JBCAFP, 32pin)ですが、「Renesas USB MCU, USB Peripheral Human Interface Devices Class Driver (PHID) using Basic Mini Firmware」で公開されているソースコード、そのまま動かないようです。なお、USBキーボードとして動作させるモードを使おうとしてます。

今、作業始めて見つけた条件の違いは、

(1) 48pinが、前提で、32pinにはないポートをスイッチに割り当てている。再配置が必要かも。←sw1,sw2,sw3で使ってるポートは、32pinにもありました。
(2) 外付け水晶を使った発信が前提で、内蔵発信器になっていないこと。ロースピードで良いので、内蔵発信器で動くようにしたい。
(3) 今後の作業で見つけていきます。

上記の3つの中で、(2)の変更をするための情報が知りたく、お願い致します。

RL78G10と同様の回路で、制御プログラムは書き込めているようです。

ユーザズマニュアルでは、下記の記載がヒントかな。

② 高速オンチップ・オシレータ
オプションバイト(000C2H)により,fHOCO = 48 MHz (TYP.) /24 MHz (TYP.)から周波数を選択し,発振させることができます。CKSELRビット(MCKCレジスタのビット0)を"0"に設定すると,周波数fHOCOをRDIV0, 1ビット(MCKCレジスタのビット1, 2)の設定によって,2/4/8分周(2分周がデフォルト)したクロックがメイン・システム・クロック・ソース(fIH)として選択されます。リセット解除後,CPUは必ずこの高速オンチップ・オシレータ・クロックで動作を開始します。
USBクロックとして高速オンチップ・オシレータ・クロックをソースクロックとして選択(USBファンクション・コントローラ機能のロウ・スピード転送時のみ使用可能)する場合は,fHOCOの周波数選択を48 MHzとした上で,メイン・システム・クロック(fMAIN)に必ずfHOCOを分周したメイン・システム・クロック・ソース(fIH)を選択して使用してください。
STOP命令の実行またはHIOSTOPビット(CSCレジスタのビット0)の設定により,発振を停止す
ることができます。
オプション・バイトで設定した周波数は,高速オンチップ・オシレータ周波数選択レジスタ(HOCODIV)で変更できます。周波数は,図5-9 高速オンチップ・オシレータ周波数選択レジスタ(HOCODIV)のフォーマットを参照してください。

③ PLL(Phase Locked Loop)による高速システム・クロックの逓倍機能USBホスト/ファンクション・コントローラ用のクロック供給を主目的としたクロック機能で,PLL発振周波数(fPLL)が48MHzとなるようにDSCCTLレジスタを設定して使用します。また、CKSELRビットを"1"に設定すると,周波数fPLLをRDIV0, 1ビットの設定によって,2/4/8分周したクロックがメイン・システム・クロック・ソース(fIH)として選択されます。USBクロックとしてPLLクロックをソースクロックとして選択する場合はメイン・システム・クロック(fMAIN)として必ずfPLLを分周したメイン・システム・クロック・ソース(fIH)を選択して使用してください。
DSCONビット(DSCCTLレジスタのビット0)の設定により,PLLを動作,停止させることができます。なお,PLLの設定の詳細およびUSBクロックとの接続関係に関しては図5-12,表5-3を参照してください。

これの具体的なプログラムがどうなうのか? でも、②と③で、混乱

試しに、「//    MCKC |= 0x01;                     /* Select PLL clock (fPLL) */」とコメントアウトすると、下写真のエラーメッセージがでるようになったが、どう設定するのだろうか?

上写真は、ロースピードでつけろと書いてあったコンデンサを外した時のエラー。

前提として、USBデバイスとして、使うときは、水晶発振器が必須ということではないですよね。

-------

デバイスマネージャのダイアログを見ていると、一瞬、HIDキーボードデバイスとして、認識されているようだ。

  • digipontaさん

    図5-1 クロック発生回路のブロック図を見ると、内蔵高速発振器をUSBに接続するには以下の設定でよさそうですよ。

    DSCCTL=0x00;//DSFRDIV=0分周なし(PLLを使わない場合はDSCCTLの設定は不要かも)
    HOCODIV=0x00;//48MHz
    MCKC=0x00;//FIOCO選択

    内蔵発振器の精度だとUSB規格的にLow-speedにしか対応できないんですよねー。

    ちなみに、LowSpeedなので、G1CのD-/D+のラインにそれぞれ0.22uF 220pFくらいのコンデンサをつけてます?

  • Kirinさん、情報、有難うございます。試すと、残念ですが、認識エラーのままでした。

    とりあえず、RL78G1Cの32pinに、外付けで12MHzの水晶振動子を付けて、動作確認をしたところ、サンプルソースコードを無修正で、PCからHIDキーボードデバイスとして認識されました。

    現状までの確認では、RK78G1C/32pinに、外付け12MHz水晶振動子(外部コンデンサは2個とも10pF、抵抗は零Ω)を付けると、サンプルソースコードは無修正で、キーボードモードが稼働。SW1,SW2, SW3のポートは、32pinパッケージにも出廷ます。

    しかし、秋葉原の店頭で買える12MHz水晶振動子が、大きすぎる(;^ω^)

  • こんなの も売ってるみたいですよ。

  • 情報、有難うございます。一昨日、行ったときに、見つけられなかった模様です。でも、更に10pFのコンデンサ2個付けるスペースが捻出するのが難しそう。今、空中配線でも良いかと挫折しようかと

    USBコネクタから、RL78G1Cまで、10cm弱あるので、PBC側のスペース捻出よりも、USBの2芯シールドケーブルで内部接続するのが、無難か。

    -------

    ブレッドボードでUSBの実験するのが、駄目そうな気がしてきました。

    現状は、E20付けて、3.3V電源つなぐと、正常に、HIDキーボードとして認識されるが、5V電源に変えると、USBケーブルを短くしないと、正常に認識されないことが、判明。E20を繋げずに、直接、電源をつなげると、一瞬、PCのデバイスマネージャが再描画されて、不明なUSBデバイスになるか、一覧から消失したままという状況。USBから電源をとると、PCのデバイスマネージャが再描画も起きずにだんまり。アナログ的な条件なのか、そもそも何かがずれているのか、E20付けて、3.3V電源つないだ状態が、なぜ安定して動作しているのかが不思議。あと、D+とD-のそれぞれに直列に、51Ω(有り合わせなので、45Ωなかった)を入れると、E20付状態だけど、5V電源でも、PCに正常に認識される状態になった。やはり、E20の有無で何が異なるのか気になる。

  • digipontaさん

    動きませんでしたか、、、
    ちなみにC2h番地のオプションバイトはF0h(48MHz)ですよね?

    あと追加で、
    UCKSEL=0x0001;//USBクロックに高速オンチップ・オシレータ・クロック(fHOCO)を選択する
    を設定する必要がありそうです。

    PS
    と思ったら、UCKSELはL1Cにしかないレジスタみたいです。同じUSBじゃないのかなぁ、謎だぁ。。。。

    *((volatile unsigned short *)0xf06C4)=0x0001; //UCKSEL
    とかやったらダメかな。。

  • Kirin さん

    有難うございます。

    不安定ながら、HIDキーボードとして認識されるようです。ブレッドボードでの実験に問題があるようです。

    あと、D+とD-のポートを、いじくっていると、チップが簡単に壊れるようで、困惑中。

  • 結局、外付け水晶振動子なしで、HIDキーボードに認識が正常にできました。

    但し、E20を接続していないと、認識されない状況(;^ω^)

    ソースコードの修正は、レス通りの下記です。低速モードで、D+とD-に必要になるコンデンサ値が、ユーザズマニュアル・ハードウェア編のページ693の図だと、200nF-450nFとありますが、これがまずミスプリですよね(;^ω^) 200pF-450pFの読み替えるのが正しい?

    void usb_cpu_mcu_initialize(void)
    {
        volatile uint8_t    ostc_reg_val;

    #if 1    // 外付け水晶振動子無しのの場合
        *((volatile unsigned short *)0xf06C4) = 0x0001;  //UCKSEL
        DSCCTL = 0x00; //DSFRDIV=0分周なし(PLLを使わない場合はDSCCTLの設定は不要かも)
        HOCODIV = 0x00; //48MHz
        MCKC = 0x00; //FIOCO選択  

    #else // もともとのソースコード
        /* To operate the X1 oscillator */
        CMC = 0x41;                       /* X1, 10MHz<fx<=20MHz */

        /* Select the oscillation stabilization time of the X1 oscillator at releasing of the STOP mode. */
        OSTS = 0x05;

        /* To start oscillating the X1 oscillator */
        MSTOP = 0;                        /* Start X1  (12MHz)*/

        /* To set the PLL multiplication and division */
        DSCCTL = 0x06;                    /* Divided by 2, 16 times (8 times) */

        /* Main Clock Control Register (MCKC) Address F02E6h */
        MCKC = 0x00;                      /* Devided by 2, High-speed on-chip oscillator clock (fHOCO) */

        /* PLL Control Register (DSCCTL) Address F02E5h */
        DSCCTL |= 0x01;                   /* Ocsillation, output */
        usb_cpu_delay_1us(40);            /* wait 40us */

        /* Main Clock Control Register (MCKC) Address F02E6h */
        MCKC |= 0x01;                     /* Select PLL clock (fPLL) */
     
        usb_cpu_delay_1us(40);            /* wait 40us */

        /* Wait oscillation stabilization time */
        usb_cpu_delay_1us(40);
        while ( 1 )
        {
            ostc_reg_val = OSTC;
            if ( ostc_reg_val == (uint8_t)0xFC )
            {
                break;
            }
        }
    #endif
     
    }   /* eof usb_cpu_mcu_initialize() */

    バグあり基板を、ジャンパで訂正して、動作確認しまいした。D+とD-のコンデンサは、220pFいれました。抵抗器はいれてないです。ないとだめなのか不明。

    あとは、E20を繋げないでも、正常動作させる不具合の解決。

  • E20が無いと動かないというのはGNDが問題かな?

    抵抗は速度通知のために必要です。

    http://www.kumikomi.net/archives/2007/03/22usb1.php?page=4

    このプロセッサは内蔵のプルアップ・プルダウン抵抗があるんですね。

    DRPD、DPRPU、DMRPUを設定すればOKみたい。

  • Yamamoto さま

    情報、有難うございまいます。D+とD-のプルアップは、サンプルソース側で、設定しているようです。

    説明不足で申し訳ないですが、抵抗値で分かりかねているのは、下画像のR1,R2です

  • digipontaさん

    だいぶ動いてきて良かったですね。

    G1Cの電気的特性やRSKの回路図を見る限り、ロースピード・非ロースピード共にD+D-は抵抗なしでコネクタとCPUを直結で問題なさそうですよ。
    documentation.renesas.com/.../r20ut1981eg0100_rskrl78g1c_schematics.pdf
    最近のマイコンはUSBのダンピング抵抗(R1,R2)も内蔵になっていそうですから。

    差動90Ωは、ロースピードならあまり気にしなくても大丈夫です。(どうしてもというなら、空中配線でケーブルをよってツイストペアにすれば100Ω前後になりますし)