Hiroです。
以前、シリアルフラッシュからのブート起動が出来ないことを質問させていただきました。
その時点では解決したのですが、また問題が発生しましたので質問します。
ブートファイルを書き換えるとシリアルフラッシュからの起動ができなくなります。
ブートファイルはICEで書き込んでいます。
シリアル通信によるPC画面上での確認では、一切動いてない状態です(メッセージが一切出力されません)。
一度NORフラッシュから(BOOT_MODE0で)起動を掛けると、それ以降はシリアルフラッシュから(BOOT_MODE3で)
の起動が可能となります。
ブートファイルの書き換え時に環境設定を消去したのではないかと考えたのですが、
データは残っていますし、Kernaelイメージをシリアルフラッシュに書き込んでいるのですが
NORフラッシュ起動時にもKernelイメージをシリアルフラッシュから読み込んでいるので
環境設定は残っているようです。
NORフラッシュからの起動以降は、シリアルフラッシュからの起動が可能になることから
ブート処理の中で何かを設定することで起動可能になっていると思いますが、
ブートファイルの書き換えでその設定を壊すとも考えづらいと思います。
ブートファイル書き換え後に、シリアルフラッシュから(BOOT_MODE3で)起動させるには
何をすればよいかをお教えください。
以上
Hiro さん
丁度、良いタイミングでした。上の
> ブートのポート設定時にP4_10とP4_11を出力ポートの設定に変更してみました。
は、include/configs/rskrza1.h の中で定義している値を変更したのだと思います。
それは、変更したままで、更に、board/renesas/rskrza1/lowlevel_init.S の赤字の部分(ポート4の設定部分)を青字の部分(ポート9の設定部分) の後ろに移動したブートプログラムで、同じことをしてみていただけますか? ♯ 最初の数字は、行番号です。
点灯しないことが私の期待なのですが。
100 write16 PM3, PM3_S101 write16 PIBC3, PIBC3_S102103 /* Port4 Control register Reset */104 write16 PIBC4, PIBC4_D105 write16 PBDC4, PBDC4_D106 write16 PM4, PM4_D107 write16 PMC4, PMC4_D108 write16 PIPC4, PIPC4_D109110 /* Port4 Control register Set */111 write16 PBDC4, PBDC4_S112 write16 PFC4, PFC4_S113 write16 PFCE4, PFCE4_S114 write16 PFCAE4, PFCAE4_S115 write16 PIPC4, PIPC4_S116 write16 PMC4, PMC4_S117 write16 P4, P4_S118 write16 PM4, PM4_S119 write16 PIBC4, PIBC4_S120121 /* Port5 Control register Reset */122 write16 PIBC5, PIBC5_D123 write16 PBDC5, PBDC5_D
(途中、略)
190 write16 PM8, PM8_S191 write16 PIBC8, PIBC8_S192193 /* Port9 Control register Reset */194 write16 PIBC9, PIBC9_D195 write16 PBDC9, PBDC9_D196 write16 PM9, PM9_D197 write16 PMC9, PMC9_D198 write16 PIPC9, PIPC9_D199200 /* Port9 Control register Set */201 write16 PBDC9, PBDC9_S202 write16 PFC9, PFC9_S203 write16 PFCE9, PFCE9_S204 write16 PFCAE9, PFCAE9_S205 write16 PIPC9, PIPC9_S206 write16 PMC9, PMC9_S207 write16 P9, P9_S208 write16 PM9, PM9_S209 write16 PIBC9, PIBC9_S210211 /* Port10 Control register Reset */212 write16 PIBC10, PIBC10_D213 write16 PBDC10, PBDC10_D
Hiroさん
> ご指示の通り、Port4の設定をPort9の設定の後に移動させたところ、> 期待されたとおりにLEDは点灯しませんでした。が、PC画面上には何も> 表示されません。
PC画面上に何も表示されない(言い換えれば、ポート4の設定箇所の前で暴走するので、ポート4の設定箇所以降は、実行されない)ことを含めて、期待通りです。
Hiro さんに幾つかの実験をお願いし、結果を戴きましたが、現時点では、未だ、辻褄が合わない結果があります。予め、ご承知ください。
----今回の問題は、u-boot の不具合で、u-boot がシリアルフラッシュから命令などを読み出しながら実行している最中に、シリアルフラッシュとの接続に使用している端子(ポート9の端子)の設定を変更(初期化)しているために、命令などが正しく読み出せず、誤動作を起こしていると考えています。つまり、先のメールの青色部分に問題があります。
ただ、私の所で不再現であったり、Hiroさんの所で NOR フラッシュのu-boot を一回実行すると不再現になったりするように、暴走するか否かは、ボードの個体差やその時の状態にも依存するようです。
で、対策ですが、最小限の変更で済ませるには、青色部分の処理を、・ ブートモード0で起動した場合には、現状と同じ処理を、・ ブートモード3で起動した場合には、次の4本の兼用端子の設定は 変えずに、残りの端子は、現状と同じ処理を、それぞれ行うように、include/configs/rskrza1.h の中で定義している、ポート9関連の値を調整してください。 ・ P9_2/SPBCLK_0 ・ P9_3/SPBSSL_0 ・ P9_4/SPBIO00_0 ・ P9_5/SPBIO10_0
注意する点は、ブートモード3で起動した場合、RZ/A1 内蔵 ROM の F/W が上記の4端子を設定して、シリアルフラッシュからの読み出しが可能な状態にし、0x18000000 番地から始まる u-boot にジャンプするわけですから、上で言っている「次の4本の兼用端子の設定は変えずに」の「設定」とは、リセット直後の設定ではなく、0x18000000 番地到達時点の設定であるということです。
具体的には、
355 #define PM8_S 0xffff356 #define PIBC8_S 0x0000357358 /* Port9 Control register Reset */359 #if !defined(CONFIG_BOOT_MODE0)360 #define PIBC9_D 0x0000361 #define PBDC9_D 0x0000362 #define PM9_D 0xff03 ★363 #define PMC9_D 0x003c364 #define PIPC9_D 0x003c365 #else366 #define PIBC9_D 0x0000367 #define PBDC9_D 0x0000368 #define PM9_D 0xffff369 #define PMC9_D 0x0003
の★の所の値を 0xff03 から 0xffff に変更すれば良さそうですが、確認はしていません。
> #define PM9_D 0xff03 ⇒ 0xffff> にしたところ、シリアルフラッシュからの起動が出来ました。
良かったです。ソースを見る限り、この部分を作成した人も、シリアルフラッシュからの読み出しに使用している4本の兼用端子の設定は変えてはいけない(誤動作の危険がある)、ということを認識して値を定義しているようですが、偶々、上の1箇所を間違え、その後、その人の環境では、特に問題なく動作してしたため間違いに気付かなかったのでしょう。
> >また、SW1-4の設定では、カーネルが管理する時間が、計算上4%程度、遅れます。> とのご説明が有りましたが、4%の遅れを踏襲する技は有るのでしょうか。> 設定の方法などが有りましたら、ご教示願います。
誤変換?(踏襲?吸収?) で、ご質問が良く解りませんが、時間を正しくしたいなら、以前に申し上げた通り、
| ジャンパ等の設定は、BSPに含まれていたリリース通知の「4-1.DIPSW,ジャンパの設定」に| 従って、行ってください。
リリース通知に従った設定は、SW1-4=ON です。
時間が遅れるのは、Hiro さんが SW1-4=OFF と異なる設定にして、RZ/A1 の入力クロックを切り替えているためです。
> SW1-4を変更することで、4%程度の遅れが発生することが分かっているのであれば、> その遅れを無くすようなレジスタの設定方法が有るのではないかと思いました。
お察しの通り可能です。但し、このソフトが対応している設定や環境ではありませんので、自助努力、自己責任でお願いします。
補足しておきます。お気づきだと思いますが、理解しやすいので時間を取り上げましたが、入力クロックを切り替える(入力クロックの周波数が変わる)と、それから生成されるクロックを入力している RZ/A1 の内蔵周辺デバイス全般の動作に影響を与えます。
周辺デバイスにより、影響の有無は様々です。別クロックを入力している周辺デバイスの場合は、影響が無いかもしれません。あるいは、周波数分、動作速度が変わるだけかもしれません。例えば、UART、I2C、SPI など、外部デバイスと通信を行うものは、通信用のクロック周波数(と実際の周波数)との誤差が大きくなりますから、何らかの影響があるかもしれません。
いずれにせよ、ご使用になる周辺デバイスについて、影響の有無を調べ、影響する部分は見直す必要があります。