GENMAIボードでのブートについて2

Hiroです。

 

以前、シリアルフラッシュからのブート起動が出来ないことを質問させていただきました。

その時点では解決したのですが、また問題が発生しましたので質問します。

ブートファイルを書き換えるとシリアルフラッシュからの起動ができなくなります。

ブートファイルはICEで書き込んでいます。

シリアル通信によるPC画面上での確認では、一切動いてない状態です(メッセージが一切出力されません)。

一度NORフラッシュから(BOOT_MODE0で)起動を掛けると、それ以降はシリアルフラッシュから(BOOT_MODE3で)

の起動が可能となります。

ブートファイルの書き換え時に環境設定を消去したのではないかと考えたのですが、

データは残っていますし、Kernaelイメージをシリアルフラッシュに書き込んでいるのですが

NORフラッシュ起動時にもKernelイメージをシリアルフラッシュから読み込んでいるので

環境設定は残っているようです。

NORフラッシュからの起動以降は、シリアルフラッシュからの起動が可能になることから

ブート処理の中で何かを設定することで起動可能になっていると思いますが、

ブートファイルの書き換えでその設定を壊すとも考えづらいと思います。

ブートファイル書き換え後に、シリアルフラッシュから(BOOT_MODE3で)起動させるには

何をすればよいかをお教えください。

 

以上

Parents
  • Hiro さん

    > ご回答ありがとうございます。以下にご質問の回答をします。
    初心者フォーラムとは思えない適切な回答、有難うございます。非常に助かります。
    余談ですが、よろしければ、初心者フォーラムを卒業してRZフォーラム(あるいは、英語版の
    RZ Forum)へどうぞ。 最近、少し寂しいもので(笑)

    > >(1) シリアルフラッシュを書き換えた後、一旦、GENMAI の電源を落とし、再投入する。

    > シリアルフラッシュ書込み後、GENMAI電源OFF。ICEの出力画面に"ターゲット電源OFF"表示
    > GENMAI電源ON。ICEの出力画面に"ターゲット電源ON"表示

    > >(2) 0x18000000 番地にハードウェアブレークポイント(ソフトウェアブレークポイントは

    > 不可)を設定し、ブートモード3で実行する。
    > ハードウェアブレークはICEに拒否されたので、OCD(On Chip Debug)ブレークを使用しました。
    > ブレーク時のレジスタは以下の通りです。
    > PC:0x18000000、LR:0x00000000、CPSR:0x600001d3、SPSR:0x5b0d7f31

    ここまでは、特に問題ありません。

    RZ/A1 内蔵ROM のファームウェアが SPIBSC チャネル0の初期化に成功した後、
    シリアルフラッシュの先頭(0x18000000 番地)から書き込まれている u-boot に
    ジャンプしようとしてブレークがかかったものです。

    > >(5) 十秒ほど実行し、暴走しているようなら、強制ブレークして、その時のレジスタの値を
    > >確認する。

    > (4)→(5)まで実行した結果のレジスタは以下の通りです。
    > PC:0x18000004、LR:0x18000008、CPSR:0x600001db、SPSR:0x600001db
    > GENMAIボードを2枚用意して2枚ともですので、故障ではないと思っております。


    この結果で見る限り、その後、シリアルフラッシュの先頭(0x18000000 番地)から
    書き込まれている u-boot を実行しようとして、あるいは、実行中に、
    未定義命令例外を多重に起こして無限ループに入り込んでしまっているようです。

    CP15 の設定前に不動小数点演算命令や除算命令を実行した場合にも、この例外が
    発生しますが、今回のケースでは考えにくく、
    何らかの原因で、シリアルフラッシュが正しく読めない、あるいは、読めなくなる、
    と考えた方が良さそうです。

    こちらで試した限り、再現しない(特に問題無く u-boot が立ち上がる)ので、
    申し訳ありませんが、次のことを試してみていただけますか?

    先のメールの手順の (1)~(3) は、そのままで、
    (4) 0x18000000 でブレークしたら、その後、0x18000000 番地からメモリダンプして
    シリアルフラッシュが正常に読めることを確認する。
    (5) 次に 0x18000004 にハードウェアブレークポイントを設定し、(0x18000000 から)
    継続実行する。
    (6) 0x18000004 でブレークしたら、その時のレジスタ(PC, LR, CPSR, SPSR) を
    確認する。
    (7) (6) の LR のアドレスの前後10命令程度を逆アセンブルする。

    もし、(6) でブレークしなかったら、(1)~(3) は、そのままで、
    (4) 0x18000000 でブレークしたら、次に 0x18000004 にハードウェアブレーク
    ポイントを設定し、(0x18000000 から) 継続実行する。
    (5) 0x18000004 でブレークしたら、その時のレジスタ(PC, LR, CPSR, SPSR) を
    確認する。
    (7) (5) の LR のアドレスの前後10命令程度を逆アセンブルする。

    をしてみてください。
  • pecteilisさん。詳細なご検討ありがとうございます。
    まずは、
    >余談ですが、よろしければ、初心者フォーラムを卒業してRZフォーラム(あるいは、英語版の
    RZ Forum)へどうぞ。 最近、少し寂しいもので(笑)
     組み込みLinuxに関してはまったくの初心者ですので、今回のGENMAIで組み込みLinuxを動作させるまでは、
     初心者として扱ってください。(組み込みに関しては、そこそこ経験はありますが)

    >(4) 0x18000000 でブレークしたら、その後、0x18000000 番地からメモリダンプして
    シリアルフラッシュが正常に読めることを確認する。
     この時点でシリアルフラッシュが正常に読み込めません(すべて0xffです)。
     NORフラッシュ起動後に同じ操作をして、ブレーク後は、正常に読み出せます。

    シリアルフラッシュに書き込む際に、以下のスクリプトを実行しています。(添付ファイルの付け方が分かりませんのでテキストを貼り付けます)
    ############################################
    # RZ/A1H_A1M Init script
    ############################################
    # Example of circuit diagram.
    #
    # ----------+
    # RZ/A1x |
    # | +-------------+
    # | | Serial Flash|
    # ch0 |-----------+ |
    # | | |
    # | +-------------+
    # |
    # | +-------------+
    # | | Serial Flash|
    # ch1 |-----------+ |
    # | | |
    # | +-------------+
    # |
    # ----------+
    #Data Version Discription
    #-----------+---------+-----------------------
    #2013/12/27 1.00 New
    ##############################################


    #
    # ;*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    # ;*; CPG Setting ;;
    # ;*; PLL(x30),I:G:B:P1:P0 = 30:10:10:5:5/2 ;;
    # ;*; CKIO:Output at time usually,Output when bus right is opened,output at standby"L" ;;
    # ;*; Clockin = 13.33MHz, CKIO = 66.67MHz ;;
    # ;*; I Clock = 400.00MHz ;;
    # ;*; G Clock = 133.33MHz ;;
    # ;*; B Clock = 133.33MHz ;;
    # ;*; P1 Clock = 66.67MHz ;;
    # ;*; P0 Clock = 33.33MHz ;;
    # ;*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    reset
    srqwait
    #PL310 Initialize
    mem l #0x3fffff80 = 0x00000001 off

    # dummy read
    mdump #0x3fffff80,,0x4 l
    delay 1

    # FRQCR
    # FRQCR2(Default)
    mem w #0xfcfe0010 = 0x1035 off
    mem w #0xfcfe0014 = 0x0003 off

    # ;*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    # ;*; Internal RAM write enable ;;
    # ;*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    # ;*; Writing to On-Chip Data-Retention RAM is enabled.
    # ;*; SYSCR3.RRAMWE3=RRAMWE2=RRAMWE1=RRAMWE0=1
    mem b #0xfcfe0408 = 0x0f off

    # ;*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    # ;*; SPI Settings ;;
    # ;*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    # *************************************************
    # SPI Controller enable
    # *************************************************
    #STB_STBCR = STB_STBCR & ~STB_STBCR_SPIBSC0_MSK;
    mem b 0xFCFE0438 = 0xF3 off

    # *************************************************
    # Ch0 Settings
    # *************************************************
    # PORT9[7:2] Serial Flash ch0-1
    #
    # REG_PIPC9
    # REG_PM9
    # REG_PFC9
    # REG_PFCE9
    # REG_PFCAE9
    # REG_PMC9
    mem w #0xFCFE7224 = 0x00FF off
    mem w #0xFCFE3324 = 0xFF03 off
    mem w #0xFCFE3524 = 0x00FC off
    mem w #0xFCFE3624 = 0x0000 off
    mem w #0xFCFE3A24 = 0x0000 off
    mem w #0xFCFE3424 = 0x00FF off


    # PORT2[12:15]Serial Flash ch0-2
    #
    # REG_PIPC2
    # REG_PM2
    # REG_PFC2
    # REG_PFCE2
    # REG_PFCAE2
    # REG_PMC2
    mem w #0xFCFE7208 = 0xF000 off
    mem w #0xFCFE3308 = 0x0000 off
    mem w #0xFCFE3508 = 0xF000 off
    mem w #0xFCFE3608 = 0xF000 off
    mem w #0xFCFE3A08 = 0x0000 off
    mem w #0xFCFE3408 = 0xF000 off

    #REG_CMNCR
    mem l #0x3FEFA000 = 0x01fff320 off

    #REG_SSLDR 0x3FEFA004uL
    mem l #0x3FEFA004 = 0x00070707 off

    # /* ---- Bit rate 66.67Mbps ---- */
    mem l #0x3FEFA008 = 0x00000200 off


    # /* S-flash deta read address map 26bit */
    mem l #0x3FEFA014 = 0x00000001 off



    # *************************************************
    # Ch1 Settings
    # *************************************************
    # PORT8[15:10] Serial Flash ch1
    # REG_PMC8
    # REG_PFCAE8
    # REG_PFCE8
    # REG_PFC8
    # REG_PM8
    # REG_PIPC8
    mem w #0xfcfe3420 = 0xffff off
    mem w #0xfcfe3A20 = 0x0000 off
    mem w #0xfcfe3620 = 0xfc00 off
    mem w #0xfcfe3520 = 0x0000 off
    mem w #0xfcfe3320 = 0x03ff off
    mem w #0xfcfe7220 = 0xffff off


    #REG_CMNCR
    mem l #0x3FEFB000 = 0x01fff320 off

    #REG_SSLDR 0x3FEFB004uL
    mem l #0x3FEFB004 = 0x00070707 off

    # /* ---- Bit rate 66.67Mbps ---- */
    mem l #0x3FEFB008 = 0x00000200 off

    # /* S-flash deta read address map 26bit */
    mem l #0x3FEFB014 = 0x00000001 off

    # Reset of Serial Flash (ch0: Serial Flash x1)
    mem l #0x3FEFA000 = 0x81FFF320 off

    # Write enable
    mem l #0x3FEFA024 = 0x00060000 off
    mem l #0x3FEFA030 = 0x00004000 off
    mem l #0x3FEFA020 = 0x00000001 off
    # Reset
    mem l #0x3FEFA024 = 0x00F00000 off
    mem l #0x3FEFA030 = 0x00004000 off
    mem l #0x3FEFA020 = 0x00000001 off

    mem l #0x3FEFA000 = 0x01FFF320 off

    # Reset of Serial Flash (ch1: Serial Flash x1)
    mem l #0x3FEFB000 = 0x81FFF320 off

    # Write enable
    mem l #0x3FEFB024 = 0x00060000 off
    mem l #0x3FEFB030 = 0x00004000 off
    mem l #0x3FEFB020 = 0x00000001 off
    # Reset
    mem l #0x3FEFB024 = 0x00F00000 off
    mem l #0x3FEFB030 = 0x00004000 off
    mem l #0x3FEFB020 = 0x00000001 off

    mem l #0x3FEFB000 = 0x01FFF320 off

    ICEのメーカからの提供です。
    これが問題でしょうか。

    また情報として、NORフラッシュで起動させてブート開始後にキー入力でブートコマンドが入力できる状態にした後(カーネルが起動する前)で電源OFFしても、その後シリアルフラッシュからの起動はできません。NORフラッシュで起動させ、カーネルの初期化が終了(現在は、ファイルシステムでエラーになるので完全には終了していません)しないと、シリアルフラッシュからの起動はできな状況です。

    長くなってしまいましたが、ご検討をお願いします。

    以上
Reply
  • pecteilisさん。詳細なご検討ありがとうございます。
    まずは、
    >余談ですが、よろしければ、初心者フォーラムを卒業してRZフォーラム(あるいは、英語版の
    RZ Forum)へどうぞ。 最近、少し寂しいもので(笑)
     組み込みLinuxに関してはまったくの初心者ですので、今回のGENMAIで組み込みLinuxを動作させるまでは、
     初心者として扱ってください。(組み込みに関しては、そこそこ経験はありますが)

    >(4) 0x18000000 でブレークしたら、その後、0x18000000 番地からメモリダンプして
    シリアルフラッシュが正常に読めることを確認する。
     この時点でシリアルフラッシュが正常に読み込めません(すべて0xffです)。
     NORフラッシュ起動後に同じ操作をして、ブレーク後は、正常に読み出せます。

    シリアルフラッシュに書き込む際に、以下のスクリプトを実行しています。(添付ファイルの付け方が分かりませんのでテキストを貼り付けます)
    ############################################
    # RZ/A1H_A1M Init script
    ############################################
    # Example of circuit diagram.
    #
    # ----------+
    # RZ/A1x |
    # | +-------------+
    # | | Serial Flash|
    # ch0 |-----------+ |
    # | | |
    # | +-------------+
    # |
    # | +-------------+
    # | | Serial Flash|
    # ch1 |-----------+ |
    # | | |
    # | +-------------+
    # |
    # ----------+
    #Data Version Discription
    #-----------+---------+-----------------------
    #2013/12/27 1.00 New
    ##############################################


    #
    # ;*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    # ;*; CPG Setting ;;
    # ;*; PLL(x30),I:G:B:P1:P0 = 30:10:10:5:5/2 ;;
    # ;*; CKIO:Output at time usually,Output when bus right is opened,output at standby"L" ;;
    # ;*; Clockin = 13.33MHz, CKIO = 66.67MHz ;;
    # ;*; I Clock = 400.00MHz ;;
    # ;*; G Clock = 133.33MHz ;;
    # ;*; B Clock = 133.33MHz ;;
    # ;*; P1 Clock = 66.67MHz ;;
    # ;*; P0 Clock = 33.33MHz ;;
    # ;*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    reset
    srqwait
    #PL310 Initialize
    mem l #0x3fffff80 = 0x00000001 off

    # dummy read
    mdump #0x3fffff80,,0x4 l
    delay 1

    # FRQCR
    # FRQCR2(Default)
    mem w #0xfcfe0010 = 0x1035 off
    mem w #0xfcfe0014 = 0x0003 off

    # ;*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    # ;*; Internal RAM write enable ;;
    # ;*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    # ;*; Writing to On-Chip Data-Retention RAM is enabled.
    # ;*; SYSCR3.RRAMWE3=RRAMWE2=RRAMWE1=RRAMWE0=1
    mem b #0xfcfe0408 = 0x0f off

    # ;*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
    # ;*; SPI Settings ;;
    # ;*;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    # *************************************************
    # SPI Controller enable
    # *************************************************
    #STB_STBCR = STB_STBCR & ~STB_STBCR_SPIBSC0_MSK;
    mem b 0xFCFE0438 = 0xF3 off

    # *************************************************
    # Ch0 Settings
    # *************************************************
    # PORT9[7:2] Serial Flash ch0-1
    #
    # REG_PIPC9
    # REG_PM9
    # REG_PFC9
    # REG_PFCE9
    # REG_PFCAE9
    # REG_PMC9
    mem w #0xFCFE7224 = 0x00FF off
    mem w #0xFCFE3324 = 0xFF03 off
    mem w #0xFCFE3524 = 0x00FC off
    mem w #0xFCFE3624 = 0x0000 off
    mem w #0xFCFE3A24 = 0x0000 off
    mem w #0xFCFE3424 = 0x00FF off


    # PORT2[12:15]Serial Flash ch0-2
    #
    # REG_PIPC2
    # REG_PM2
    # REG_PFC2
    # REG_PFCE2
    # REG_PFCAE2
    # REG_PMC2
    mem w #0xFCFE7208 = 0xF000 off
    mem w #0xFCFE3308 = 0x0000 off
    mem w #0xFCFE3508 = 0xF000 off
    mem w #0xFCFE3608 = 0xF000 off
    mem w #0xFCFE3A08 = 0x0000 off
    mem w #0xFCFE3408 = 0xF000 off

    #REG_CMNCR
    mem l #0x3FEFA000 = 0x01fff320 off

    #REG_SSLDR 0x3FEFA004uL
    mem l #0x3FEFA004 = 0x00070707 off

    # /* ---- Bit rate 66.67Mbps ---- */
    mem l #0x3FEFA008 = 0x00000200 off


    # /* S-flash deta read address map 26bit */
    mem l #0x3FEFA014 = 0x00000001 off



    # *************************************************
    # Ch1 Settings
    # *************************************************
    # PORT8[15:10] Serial Flash ch1
    # REG_PMC8
    # REG_PFCAE8
    # REG_PFCE8
    # REG_PFC8
    # REG_PM8
    # REG_PIPC8
    mem w #0xfcfe3420 = 0xffff off
    mem w #0xfcfe3A20 = 0x0000 off
    mem w #0xfcfe3620 = 0xfc00 off
    mem w #0xfcfe3520 = 0x0000 off
    mem w #0xfcfe3320 = 0x03ff off
    mem w #0xfcfe7220 = 0xffff off


    #REG_CMNCR
    mem l #0x3FEFB000 = 0x01fff320 off

    #REG_SSLDR 0x3FEFB004uL
    mem l #0x3FEFB004 = 0x00070707 off

    # /* ---- Bit rate 66.67Mbps ---- */
    mem l #0x3FEFB008 = 0x00000200 off

    # /* S-flash deta read address map 26bit */
    mem l #0x3FEFB014 = 0x00000001 off

    # Reset of Serial Flash (ch0: Serial Flash x1)
    mem l #0x3FEFA000 = 0x81FFF320 off

    # Write enable
    mem l #0x3FEFA024 = 0x00060000 off
    mem l #0x3FEFA030 = 0x00004000 off
    mem l #0x3FEFA020 = 0x00000001 off
    # Reset
    mem l #0x3FEFA024 = 0x00F00000 off
    mem l #0x3FEFA030 = 0x00004000 off
    mem l #0x3FEFA020 = 0x00000001 off

    mem l #0x3FEFA000 = 0x01FFF320 off

    # Reset of Serial Flash (ch1: Serial Flash x1)
    mem l #0x3FEFB000 = 0x81FFF320 off

    # Write enable
    mem l #0x3FEFB024 = 0x00060000 off
    mem l #0x3FEFB030 = 0x00004000 off
    mem l #0x3FEFB020 = 0x00000001 off
    # Reset
    mem l #0x3FEFB024 = 0x00F00000 off
    mem l #0x3FEFB030 = 0x00004000 off
    mem l #0x3FEFB020 = 0x00000001 off

    mem l #0x3FEFB000 = 0x01FFF320 off

    ICEのメーカからの提供です。
    これが問題でしょうか。

    また情報として、NORフラッシュで起動させてブート開始後にキー入力でブートコマンドが入力できる状態にした後(カーネルが起動する前)で電源OFFしても、その後シリアルフラッシュからの起動はできません。NORフラッシュで起動させ、カーネルの初期化が終了(現在は、ファイルシステムでエラーになるので完全には終了していません)しないと、シリアルフラッシュからの起動はできな状況です。

    長くなってしまいましたが、ご検討をお願いします。

    以上
Children
  • 昨日の実施でブレーク時にシリアルフラッシュから読み込めないと回答しましたが、ICEでリセットを実施後に確認したところ読み込めました。(4)以降の手順を実施しましたのでご報告します。

    >(6) 0x18000004 でブレークしたら、その時のレジスタ(PC, LR, CPSR, SPSR) を確認する。
     PC:0x18000004、LR:0x18000014、CPSR:0x600001db、SPSR:0x600001d7

    >(7) (6) の LR のアドレスの前後10命令程度を逆アセンブルする。
    Addr Data Source
     18000000 ea000014 b &18000058
     18000004 e59ff014 ldr pc,&18000020
     18000008 e59ff014 ldr pc,&18000024
     1800000c e59ff014 ldr pc,&18000028
     18000010 e59ff014 ldr pc,&1800002c
     18000014 e59ff014 ldr pc,&18000030
     18000018 e59ff014 ldr pc,&18000034
     1800001c e59ff014 ldr pc,&18000038
     18000020 180001a0 stmneda r0,{r5,r7-r8}
     18000024 18000200 strmneda r0,{r9}
     18000028 18000260 stmneda r0,{r5-r6,r9}
    1800002c 180002c0 stmneda r0,{r6-r7,r9}
    18000030 18000320 stmneda r0,{r5,r8-r9}

     R0:0x08c5187a、R5:0x0000003c、R6:R7:R8:R9:0x00000000

    >もし、(6) でブレークしなかったら、(1)~(3) は、そのままで、
     これ以降の手順が、その前までの手順との違いが分かりませんでした。別の情報の取得方法が有るようでしたら、ご指示下さい。

    以上