板子现在是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,要手动加载的。