/ {
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;
};
};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;
}2 つのフラッシュを並列モードではなく独立して使用していると理解しています。XIP に使用されるフラッシュの LUT を予約し、IP コマンドを使用して他のフラッシュにアクセスできます。もう 1 つのオプションは、2 つのフラッシュの LUT をリサイクルすることです (両者の差はサイズであるため)。そして、2 番目のフラッシュの SFDP を無効にします。
BR、
オマール
こんにちは、
私も同じ問題に直面しています。
どうやって問題を解決したのか教えていただけますか?2つ目のフラッシュメモリにデータを保存する必要があるだけです。2回目のフラッシュだけにXIPを無効にするにはどうすればいいですか?
ありがとうございました。
よろしくお願いいたします。
アドリアン・クレリス