RL78/G13のSPI(CSI)でEEPROMをお読み書きしたいのですが、接続しているEEPROM(BR93L46F)は
起動時書き込み禁止になっており、書き込み許可をする動作が必要です。
一旦CSIの機能をI/Opポートに変えて、書き込み許可処理をした方がいいのでしょうか?
サンプルプログラムはありますでしょうか?
アセンブラがわからないので、C言語だけで実現したいです。
チョコです。
MicrowireBUSのEEPROMについてはRL78/G13でアプリケーション・ノートが出ていました。
「RL78/G13 Microwire 通信によるEEPROM 制御 CC-RL 」
https://www.renesas.com/jp/ja/software/D3017572.html
これは,CC-RLを用いてAT93C46Dを制御しているものですが,使えるかと思います。
NAKAさん,
Microwireでは,最初の1のデータをスタート・ビットとしているので,その前に必要な数だけ0のデータを送れば,8bit単位での通信になりまよ。
SPIが動作しないソースを添付します。
MOTOR-RL78_20191121-send.zip
提示されたプロジェクトの中で「R_CSI11_Start」を検索した結果を示します。
この結果を見ると,この関数を呼び出しているところが見つかりませんでした。
「R_CSI11_Start」が呼び出されていないと,SE0レジスタのビット3が立っていないはずですので,確認してみてください。
「R_CSI11_Start」関数の呼び出しはどうなっていますか。 R_SAU0_Createの最後で呼び出しています。
「R_CSI11_Start」関数の呼び出しはどうなっていますか。
なんか、見てるもんが違う感じですね。
r_cg_serial.c:
void R_SAU0_Create(void) { SAU0EN = 1U; /* supply SAU0 clock */ NOP(); NOP(); NOP(); NOP(); SPS0 = _0000_SAU_CK00_FCLK_0 | _0000_SAU_CK01_FCLK_0; R_CSI11_Create(); }
わかさん,誤解されているようなので,直接記述します。
main関数の中80行目で「R_CSI11_Create」関数を呼び出していますが,ここは,「R_CSI11_Start」関数を呼び出すところではないですか。
(コメントアウトするのではなく,呼び出す関数を変更するのが正しい変更方法だと思います。)