TI中文支持网
TI专业的中文技术问题搜集分享网站

DM8127 有关SPI Flash当存储器的问题

板子现在是nand启动,然后所有的程序都在nand里面。现在想在板子上面加一块64M的SPI FLASH当存储器存储程序中重要的文件,其他什么boot啊内核啊文件系统保持不变,还是放在nand中。

我需要在uboot中或者内核中修改哪些东西可以达到我要的这个目的呢?谢谢!!!

Chris Meng:

你好,

uboot本身就支持对spi flash的读写,请参考下面的链接:

http://processors.wiki.ti.com/index.php/TI81XX_PSP_UBOOT_User_Guide#Flashing_1st_stage_to_SPI_from_2nd_stage

TI8148_EVM# sf probe 0:0

TI8148_EVM# sf erase 0x0 0x20000

TI8148_EVM# sf write 0x81000000 0x0 0x20000

centvideo centvideo:

回复 Chris Meng:

额~~~我描述的不够清楚,怎么没看懂您说的。u-boot本身支持?意思什么都不需要改只要把spi flash焊接上去就能用? 我用了一下sf probe 0这个命令 ,Failed to initialize SPI flash at 0:0。

我现在不是用spi flash启动,而是程序启动之后用spi来存储文件。这个是不是需要修改kernel里面的驱动之类的….,是按照下面这个文档来吗?

http://processors.wiki.ti.com/index.php?title=TI81XX_PSP_McSPI_Driver_User_Guide&redirect=no

Chris Meng:

回复 centvideo centvideo:

你好,

请问你的spi flash的连接方式和TI EVM上一致么?如果不一致请根据你找到的链接来修改内核驱动。如果你需要在uboot下也访问spi flash,也要做类似修改。

SPI flash的驱动请参考:http://processors.wiki.ti.com/index.php/TI81XX_PSP_McSPI_Driver_User_Guide。

centvideo centvideo:

回复 Chris Meng:

u-boot不需要用到spi flash.

现在我根据这个TI81XX_PSP_McSPI_Driver_User_Guide文档修改了跟spi flash相关的东西,但是系统没有看到spi flash

现在有一个跟分区有关的疑惑,因为现在系统中已经有了nand的分区,cat /proc/mtd 可以看到nand的几个分区。如果根据TI81XX_PSP_McSPI_Driver_User_Guide这个文档中对spi flash的分区,岂不是和nand 分区一模一样了,也有u-boot、u-boot env 、kernel、filesystem等分区,这种分区不会和nand的分区冲突吗. cat /pro/mtd 时候,到底是nand 的还是spi 的.

centvideo centvideo:

回复 Chris Meng:

u-boot不需要用到spi flash.

现在我根据这个TI81XX_PSP_McSPI_Driver_User_Guide文档修改了跟spi flash相关的东西,但是系统没有看到spi flash

现在有一个跟分区有关的疑惑,因为现在系统中已经有了nand的分区,cat /proc/mtd 可以看到nand的几个分区。如果根据TI81XX_PSP_McSPI_Driver_User_Guide这个文档中对spi flash的分区,岂不是和nand 分区一模一样了,也有u-boot、u-boot env 、kernel、filesystem等分区,这种分区不会和nand的分区冲突吗. cat /pro/mtd 时候,到底是nand 的还是spi 的.

centvideo centvideo:

回复 centvideo centvideo:

这个是nand的分区

/* NAND flash information */static struct mtd_partition ti814x_nand_partitions[] = {/* All the partition sizes are listed in terms of NAND block size */ { .name = "U-Boot-min", .offset = 0, /* Offset = 0x0 */ .size = SZ_128K, }, { .name = "U-Boot", .offset = MTDPART_OFS_APPEND, /* Offset = 0x0 + 128K */ .size = 18 * SZ_128K, }, { .name = "U-Boot Env", .offset = MTDPART_OFS_APPEND, /* Offset = 0x260000 */ .size = 1 * SZ_128K, }, { .name = "Kernel", .offset = MTDPART_OFS_APPEND, /* Offset = 0x280000 */ .size = 34 * SZ_128K, }, { .name = "File System", .offset = MTDPART_OFS_APPEND, /* Offset = 0x6C0000 */ .size = 1063 * SZ_128K, //100M }, { .name = "Data", .offset = MTDPART_OFS_APPEND, /* Offset = 0x6AC0000 */ .size = 287 * SZ_128K, //27M }, { .name = "Reserved", .offset = MTDPART_OFS_APPEND, /* Offset = 0xB0C0000 */ .size = MTDPART_SIZ_FULL, },};

这个是spi 的 

/* SPI fLash information */struct mtd_partition ti8148_spi_partitions[] = { /* All the partition sizes are listed in terms of erase size */ { .name = "U-Boot-min", .offset = 0, /* Offset = 0x0 */ .size = 32 * SZ_4K, //.mask_flags = MTD_WRITEABLE, /* force read-only */ }#if 1 , { .name = "U-Boot", .offset = MTDPART_OFS_APPEND, /* 0x0 + (32*4K) */ .size = 64 * SZ_4K, //.mask_flags = MTD_WRITEABLE, /* force read-only */ }, { .name = "U-Boot Env", .offset = MTDPART_OFS_APPEND, /* 0x40000 + (32*4K) */ .size = 2 * SZ_4K, }, { .name = "Kernel", .offset = MTDPART_OFS_APPEND, /* 0x42000 + (32*4K) */ .size = 640 * SZ_4K, }, { .name = "File System", .offset = MTDPART_OFS_APPEND, /* 0x2C2000 + (32*4K) */ .size = MTDPART_SIZ_FULL, /* size ~= 1.1 MiB */ }#endif};

Chris Meng:

回复 centvideo centvideo:

你好,

请问在Linux启动过程中是否有spi flash相关打印?

分区需要你修改spi相关分区,去掉不必要的部分,例如前面4个。Linux驱动理论上应该会把nand和spi的分区顺序排列,谁在前面要看驱动加载的先后顺序。

centvideo centvideo:

回复 Chris Meng:

现在比较奇怪的一点是内核在启动过程中无任何spi相关打印,只有nand的。但是内核配置中关于spi的选项我都勾选上了,难道我pin mux配置的不对?亦或者还有其他什么地方造成spi驱动没有加载的?

您能帮我看看我的pin mux的配置吗?

这是我配置的pin mux,在ti8148ipnc.c中的board_mux中。

/* For SPI[0]_SCS[0]   */ 这个是低电平有效,不拉高是对的吗? { .reg_offset = TI814X_CONTROL_PADCONF_SPI0_CS0_OFFSET, .value = (0x01 ), }, /* For SPI[0]_SCLK */clck 拉高 { .reg_offset = TI814X_CONTROL_PADCONF_SPI0_SCLK_OFFSET, .value = (0x01 ) | TI814X_PULL_UP, }, /* For SPI[0]_D1 */  这个MISO,这样配置可对? { .reg_offset = TI814X_CONTROL_PADCONF_SPI0_D1_OFFSET, .value = (0x01 ) | TI814X_PULL_UP | TI814X_INPUT_EN, }, /* For SPI[0]_D0 */  这个是MOSI { .reg_offset = TI814X_CONTROL_PADCONF_SPI0_D0_OFFSET, .value = (0x01 ) | TI814X_PULL_UP, },

centvideo centvideo:

回复 Chris Meng:

还有这个

const struct flash_platform_data ti8148_spi_flash = { .type = "s25fl512s", .name = "spi_flash", .parts = ti8148_spi_partitions, .nr_parts = ARRAY_SIZE(ti8148_spi_partitions),};

struct spi_board_info __initdata ti8148_spi_slave_info[] = { { .modalias = "m25p80", .platform_data = &ti8148_spi_flash, .irq = -1, .max_speed_hz = 75000000, .bus_num = 1, .chip_select = 0, },};

m25p80.c下的

{ "s25fl512s", INFO(0x010220, 0,  256 * 1024, 256, 0) },

Chris Meng:

回复 centvideo centvideo:

你好,

你能否打开.config文件看看你的spi驱动是否正确配置了?SPI的驱动你在kernel配置里面没有配置为module吧?如果配置为M,要手动加载的。

赞(0)
未经允许不得转载:TI中文支持网 » DM8127 有关SPI Flash当存储器的问题
分享到: 更多 (0)