マイコン:RL78/G14開発環境:CS+forCC
コード生成機能を使ってI2CのEEPROMを使おうとしているのですがうまくいきません。
具体的には下記のコードを実行するとアドレスがデータとして保存されてしまっています。
読み込むことはできるのですがどうもメモリの先頭から順々に保存されているらしくアドレスもデータとして読み込んでしまいます。
コード生成を用いたEEPROMの読み書き方法を教えていただけないでしょうか?
初歩的な部分での間違いかもしれませんがよろしくお願いします。
uint8_t buf[16]; R_MAIN_UserInit(); buf[0] = 0x00; /*アドレス上位8bit*/ buf[1] = 0x10; /*アドレス下位8bit*/ buf[2] = 0xee; /*データ1byte*/ i2c_flag = 0; R_IICA0_Master_Send(Slave_Address, buf, 3, 1); while (i2c_flag == 0); R_IICA0_StopCondition(); while (SPD0 == 0) ;
チョコです。
そのままでは、コード生成のIICA関係のAPIはリスタートに対応していないので、使い物になりません。
クレームを付けたら、1回の送信処理完了後にSTOPコンディションを出さないようにはなったのですが、通信の開始処理の頭でI2Cバスのチェックをしているのですが、自分自身でI2Cバスを占有しているのにビジーチェック(IICBSY0が1かどうか)を行い、そこでエラーにしてしまっています。ここのif文をなくせばうまくいくはずです。(具体的には、if文が条件を満足しないようにしてしまう。)
AT24C1024B(1Mビット)を使っているということは、128Kバイトなので、2バイトでは、アドレスが不足するので、スレーブアドレスに最上位ビットを組み入れるはずですが、そこらはきちんとケアされていますか。
また、提示されたAPIの使い方では少なくとも、「R_IICA0_Master_Send」関数の第4引数の1は小さすぎます。
個人的にはコード生成のAPIのこの引数は気に入りません。というか、APIそのものが気に入らないので、
I2C関係は自分でライブラリを作っています。
「サンプルプログラム等」にいくつかI2C関係のプロジェクトを登録しています。そこにI2C関係のライブラリがあります。
IICマスタ(RL78/G13版)改
https://japan.renesasrulz.com/cafe_rene/m/sample_program/293
「サンプルプログラム等」は下の図のようにトップページの上の方から行くことができます。
https://japan.renesasrulz.com/cafe_rene/m/sample_program
ここにはエクセルで一覧があるので、RL78で絞り込めば、RL78関係のサンプルプログラムが探せます。
以上