1892061_ja-JP

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

1892061_ja-JP

1892061_ja-JP

i.MXRT1062 および IS25WX256 オクタル フラッシュの問題

良い一日です、

IS25WX256-JHLEフラッシュと合わせてMIMXRT1062DVL6Bを使用した製品を開発しています。これはカスタムボードですが、NXP MCU BootUtility v6.2.0を使用してUSB経由でフラッシュする基本的なLED点滅ファームウェアでフラッシュからの起動が機能することを確認しました。

デバイスモデルを「ISSI_OctalSPI_IS25LXxxx_IS25WXxxx」に設定し、周波数を30MHzのみ変更します。

開発を続けると、2つの別々の問題に遭遇しました。

1: ROM ブートローダが 128KiB より大きいイメージの起動を拒否する

128Kより小さいファームウェアは問題なく起動しますが、それ以上のファームウェアは起動しません(デバッガをアタッチすると、ROM領域からのコードのみが実行中であることが表示されます)。

他の問題は、簡単な変更を行うことで除外します。

boot_dataの「length」フィールドを128K未満の数値にパッチします。


boot_data at 0x60001020
uint32_t start
uint32_t length <-- Only patched this from 200K to 30K!
uint32_t plugin

その後、ファームウェアは実際には大きいにもかかわらず、問題なく起動します。フラッシュ内の 128K を超える領域は、ファームウェアから問題なくアクセスできます。

これで、より大きなイメージ を起動できるようになりました が、それは悪いハックのように感じます。何がそんなに問題ですか。

2:J-Link経由のフラッシュが機能しない

J-LinkやOzoneデバッガを使ってフラッシングができると、開発に大いに役立つと思います。

これをスムーズに機能させるにはどうすればよいでしょうか?

SEGGERの内蔵フラッシュローダーとRT-UFLを試してみました。
ここでは、この問題について詳しく説明しました https://github.com/JayHeng/RT-UFL/issues/16



i.MXRT 106倍Re: i.MXRT1062 および IS25WX256 オクタル フラッシュの問題

さて、私は最小限のフラッシュローダーをゼロから書きましたが、これは機能しているようです。

このスレッドを見つけている他の人にとって重要なポイント:

  • フラッシュチップは、ROM APIを使用する前に、RESET#ピンを介してリセットする必要があります。RT-UFLでは、このようなことはございません。
  • ROM API (fsl_romapi.h)素晴らしい作品です!NXP MCU Boot Utilityからoption0の値を取得すると、すぐに機能し、消去/プログラム/0x60000000での表示など。
  • フラッシュローダのテスト中に「ターゲットの準備後、ターゲットシステムのPCが予期しない値を持っています(PC=0x00000000)!」と表示されることがありました。理由はわかりません。RT-UFLからufl_init_hardware_imxrt106x()を(BOARD_InitBootClocks%など)代わりに使い始めたところ、問題が解決しました。コードサイズの問題であるか、ツールチェーン(zig toolchain/clang/lld)に関連している可能性があります。
  • リンカなどのセクションの設定方法については、wiki.segger.com/SEGGER_Flash_Loader の指示に従ってください。これは RT-UFL (CMSIS ローダー API) とは異なる機能を使用しますが、それ以外は同じように機能することに注意してください。SEGGER APIは、1回の関数呼び出しで複数のセクターをプログラム/消去するため、 大幅に 高速です。彼らはいくつかの.aに言及していますバイナリですが、私にとってはそれがなくてもうまくいきました。
  • 独自のフラッシュローダーを開発するのは面倒ですが、少なくとも、フラッシュローダーがボード上のLEDを点滅するように調整したり、UARTに出力してデバッグに役立てたりすることができます。
  • ファームウェアイメージでは、NXP MCU Boot Uilityによって生成された8KiBブートヘッダー(FCFB...)をコピーして、.textの前に配置しましたセクションにリンカー経由で追加します。だから私は.elfだけを使用してJ-Linkで空のボードをフラッシュすることができますファイル。
  • また、SEGGER_FL_Restore() のフラッシュチップをリセットして、ROM ブートローダが正しく起動するようにします (JLinkScript でもこれを実行できます)。

フラッシュローダーの使用を開始するための基本コード:


    serial_nor_config_option_t option;
    option.option0.U = 0xC0603001;
    option.option1.U = 0;
    
    // NOTE(robin): Reset the flash chip as it may be in an invalid state.
    BOARD_INITPINS_FLASH_RST_GPIO->DR_CLEAR = BOARD_INITPINS_FLASH_RST_PIN_MASK;
    for(volatile int i = 0; i < 1000; ++i) {}
    BOARD_INITPINS_FLASH_RST_GPIO->DR_SET = BOARD_INITPINS_FLASH_RST_PIN_MASK;
    for(volatile int i = 0; i < 1000; ++i) {}

    status_t volatile status = ROM_FLEXSPI_NorFlash_GetConfig(0, &flashConfig, &option);
    if(status == kStatus_Success)
    {
        status = ROM_FLEXSPI_NorFlash_Init(0, &flashConfig);
        if(status == kStatus_Success)
        {
            // Go nuts
        }
    }  



Re: i.MXRT1062 および IS25WX256 オクタル フラッシュの問題

リンクをありがとうございます。

だから、はっきり言って、これが私が持つべきものですか?


  
    
    
  

J-Linkポップアップでは、 Compare は100%まで満たされますが、消去に失敗します。


Device "MIMXRT1062_OCTAL" selected.
Found SW-DP with ID 0x0BD11477
DPIDR: 0x0BD11477
CoreSight SoC-400 or earlier
Scanning AP map to find all available APs
AP[1]: Stopped AP scan as end of AP map has been reached
AP[0]: AHB-AP (IDR: 0x04770041)
Iterating through AP map to find AHB-AP to use
AP[0]: Core found
AP[0]: AHB-AP ROM base: 0xE00FD000
CPUID register: 0x411FC271. Implementer code: 0x41 (ARM)
Cache: L1 I/D-cache present
Found Cortex-M7 r1p1, Little endian.
FPUnit: 8 code (BP) slots and 0 literal slots
CoreSight components:
ROMTbl[0] @ E00FD000
[0][0]: E00FE000 CID B105100D PID 000BB4C8 ROM Table
ROMTbl[1] @ E00FE000
[1][0]: E00FF000 CID B105100D PID 000BB4C7 ROM Table
ROMTbl[2] @ E00FF000
[2][0]: E000E000 CID B105E00D PID 000BB00C SCS-M7
[2][1]: E0001000 CID B105E00D PID 000BB002 DWT
[2][2]: E0002000 CID B105E00D PID 000BB00E FPB-M7
[2][3]: E0000000 CID B105E00D PID 000BB001 ITM
[1][1]: E0041000 CID B105900D PID 001BB975 ETM-M7
[1][2]: E0042000 CID B105900D PID 004BB906 CTI
[0][1]: E0040000 CID B105900D PID 000BB9A9 TPIU-M7
[0][2]: E0043000 CID B105F00D PID 001BB101 TSG
I-Cache L1: 32 KB, 512 Sets, 32 Bytes/Line, 2-Way
D-Cache L1: 32 KB, 256 Sets, 32 Bytes/Line, 4-Way
Connected to target device.
J-Link/J-Trace serial number: 601014830
Reset: Halt core after reset via DEMCR.VC_CORERESET.
Reset: Reset device via AIRCR.SYSRESETREQ.
Failed to erase sectors.

私もMIMXRT1060_UFL_L0で試してみましたが、同じ結果が得られました。

これをきちんとデバッグするためには、自分でRT-UFLをビルドする必要があると感じています。悲しいことに、そのビルドシステムはKeil MDKまたはIARのいずれかに依存しているようですが、これらは私たちが使用していない有料ソリューションです。だから私は最初にそれを変換する必要があります..

Tags (1)
No ratings
Version history
Last update:
‎11-21-2025 09:44 PM
Updated by: