2174729_ja-JP

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

2174729_ja-JP

2174729_ja-JP

Zephyr の FlexSpi 1 台で 2 つの NOR フラッシュを構成できない
こんにちは、
私は i.mx RT1050 ボードをベースにしたボードを使って作業しています。flexspi の 2 つのバンクには 2 つの NOR フラッシュがコネクテッド。XIP ブートにはバンク 1 も使用しています。フラッシュを 1 つだけ使用すると正常に動作します。しかし、2 番目のフラッシュを追加すると、LUT 用のスペースが不足しているように見える問題が発生します。私の 2 つのフラッシュは w25q128 と w25q64 で、それぞれ flexspi ポート A1 と B1 にコネクテッドされています。
 
これはオーバーレイ ファイル内の私の設定です。
 
/ {
    chosen {
        zephyr,flash-controller = &w25q128jv;
        zephyr,flash = &w25q128jv;
        zephyr,code-partition = &slot0_partition;
    };
};
 
&flexspi {
    status = "okay";

    rx-clock-source = <1>;
    pinctrl-0 = <&pinmux_flexspi1>;
    pinctrl-names = "default";

    reg = <0x402a8000 0x4000>, <0x60000000 DT_SIZE_M(64)>;
    /delete-node/ is25wp064@0;

    w25q128jv: w25q128jv@0 {
        compatible = "nxp,imx-flexspi-nor";
        size = ;
        reg = <0>;
        spi-max-frequency = <104000000>;
        status = "okay";
        jedec-id = [ef 70 18];
        erase-block-size = ;
        write-block-size = <16>;
        enter-4byte-addr = <0>;

        partitions {
            compatible = "fixed-partitions";
            #address-cells = <1>;
            #size-cells = <1>;

            boot_partition: partition@0 {
                label = "mcuboot";
                reg = <0x00000000 DT_SIZE_K(256)>;
            };

            /* Adjusted slot sizes for 16MB total */
            slot0_partition: partition@20000 {
            label = "image-0";
            reg = <0x00040000 (DT_SIZE_M(3) + DT_SIZE_K(512))>; 
            };

            slot1_partition: partition@320000 {
            label = "image-1";
            reg = <0x00320000 DT_SIZE_M(3)>;
            };

            storage_partition: partition@620000 {
            label = "storage";
            reg = <0x00620000 (DT_SIZE_M(1) - DT_SIZE_K(768))>;  
            };
        };
    };


    w25q64jv: w25q64jv@2 {
        compatible = "nxp,imx-flexspi-nor";
        size = ;      /* 8MB (64Mbit) flash */
        reg = <2>;                     /* FlexSPI B */
        spi-max-frequency = <104000000>;
        status = "okay";
        jedec-id = [ef 40 17];        /* Winbond W25Q64JV JEDEC ID */
        erase-block-size = ;
        write-block-size = <16>;

        partitions {
            compatible = "fixed-partitions";
            #address-cells = <1>;
            #size-cells = <1>;

            data_partition: partition@0 {
                label = "data-storage";
                reg = <0x00000000 DT_SIZE_M(8)>;
            };
        };
    }; 


};
 
そしてピンマックスは、
 
&pinctrl {
    pinmux_flexspi1: pinmux_flexspi1 {
        group_a {
            pinmux = <&iomuxc_gpio_sd_b1_06_flexspi_a_ss0_b>,
                     <&iomuxc_gpio_sd_b1_07_flexspi_a_sclk>,
                     <&iomuxc_gpio_sd_b1_08_flexspi_a_data0>,
                     <&iomuxc_gpio_sd_b1_09_flexspi_a_data1>,
                     <&iomuxc_gpio_sd_b1_10_flexspi_a_data2>,
                     <&iomuxc_gpio_sd_b1_11_flexspi_a_data3>;
            drive-strength = "r0-6";
            slew-rate = "fast";
            nxp,speed = "200-mhz";
            input-enable;
        };

        group_b {
            pinmux = <&iomuxc_gpio_sd_b1_03_flexspi_b_data0>,
                     <&iomuxc_gpio_sd_b1_02_flexspi_b_data1>,
                     <&iomuxc_gpio_sd_b1_01_flexspi_b_data2>,
                     <&iomuxc_gpio_sd_b1_00_flexspi_b_data3>,
                     <&iomuxc_gpio_sd_b1_04_flexspi_b_sclk>,
                     <&iomuxc_gpio_sd_b1_05_flexspi_b_ss0_b>;
            drive-strength = "r0-6";
            slew-rate = "fast";
            nxp,speed = "200-mhz";
            input-enable;
        };
    };
 
 
起動時にプログラムはこのwhileループに突入し、
 
if (flash_flexspi_nor_probe(data)) {
 if (memc_flexspi_is_running_xip(&data->controller)) {
 /* We can't continue from here- the LUT stored in
 * the FlexSPI will be invalid so we cannot XIP.
 * Instead, spin here
 */
while (1) {
 /* Spin */
 }
 }
LOG_ERR("SFDP probe failed");
return -EIO;
 }
 
 
ステップごとにデバッグしてみると、各フラッシュ デバイスが LUT で 40 ~ 48 のスペースを使用しているように見えます。したがって、フラッシュが 2 つあると、最大 LUT である 64 を超えてしまいます。
 
何か間違ったことをしているのでしょうか?これを実現するにはどうすればいいでしょうか
i.MXRT 105xRe: Cannot configure two NOR flashes on single FlexSpi in Zephyr

2 つのフラッシュを並列モードではなく独立して使用していると理解しています。XIP に使用されるフラッシュの LUT を予約し、IP コマンドを使用して他のフラッシュにアクセスできます。もう 1 つのオプションは、2 つのフラッシュの LUT をリサイクルすることです (両者の差はサイズであるため)。そして、2 番目のフラッシュの SFDP を無効にします。

BR、
オマール

Re: Cannot configure two NOR flashes on single FlexSpi in Zephyr

こんにちは、

私も同じ問題に直面しています。

どうやって問題を解決したのか教えていただけますか?2つ目のフラッシュメモリにデータを保存する必要があるだけです。2回目のフラッシュだけにXIPを無効にするにはどうすればいいですか?

ありがとうございました。

よろしくお願いいたします。

アドリアン・クレリス

Tags (1)
No ratings
Version history
Last update:
20 hours ago
Updated by: