MT7628开发(1)--Uboot添加新Flash支持

Uboot添加64M flash的支持

现在市面上64M的SPI Flash还不多,在MT7628的Uboot中原生支持的64M Flash只有"MX25L51245G"这一款。如果需要使用其他型号的Flash需要自行在drivers/spi_flash.c文件中添加Flash的型号及参数。
添加型号的位置在drivers/spi_flash.c文件中static struct chip_info chips_data数组中。该数组每行有6个参数。每个参数定义如下:

  1. 芯片型号 – 该型号名称可自定义,无严格要求
  2. 芯片ID – 芯片厂家的ID,通常情况下同一家厂家的ID一样,例如winbond(W25系列Q)的大多为0xef,旺宏电子(MX系列)的为0xc2。
  3. 芯片的jedec_id – 芯片的jedec id,需要查询各个芯片对应的datasheet来确认,但每个厂家对该id的叫法不同,不好查询。可以修改同文件的struct chip_info *chip_prob(void)函数来在uboot启动时直接打印读出的jedec id数值,再将读出的数值填入。
struct chip_info *chip_prob(void)
{
	struct chip_info *info, *match;
	u8 buf[5];
	u32 jedec, weight;
	int i;
 
	raspi_read_devid(buf, 5);
	jedec = (u32)((u32)(buf[1] << 24) | ((u32)buf[2] << 16) | ((u32)buf[3] <<8) | (u32)buf[4]);
	printf("spi device id: %x %x %x %x %x (%x)\n", buf[0], buf[1], buf[2], buf[3], buf[4], jedec);

........
  1. sector_size – 芯片每个sector的大小,需要查询芯片的Datasheet确定,不可填错,否则Uboot刷写Flash时可能出错。
  2. n_sectors – 芯片的sectors数量,需要查询芯片的Datasheet确定,不可填错,否则Uboot刷写Flash时可能出错。
  3. addr4b – 芯片是否使用4Bit模式。需要注意的是该模式可由芯片外围电路硬件控制。但大于16Mbytes的Flash芯片均需要采用4Bit模式通信,所以大于16Mbytes的芯片该位都需要填1。

添加好几款市面常见的64M Flash的代码

添加了S25FL512S,W25Q512JV,W25Q512JV-DTR,W25M512JV(不建议使用),W25M512JW(不建议使用)。

static struct chip_info chips_data [] = {
	/* REVISIT: fill in JEDEC ids, for parts that have them */
	{ "AT25DF321",          0x1f, 0x47000000, 64 * 1024, 64,  0 },
	{ "AT26DF161",          0x1f, 0x46000000, 64 * 1024, 32,  0 },
	{ "FL016AIF",           0x01, 0x02140000, 64 * 1024, 32,  0 },
	{ "FL064AIF",           0x01, 0x02160000, 64 * 1024, 128, 0 },
	{ "MX25L1605D",         0xc2, 0x2015c220, 64 * 1024, 32,  0 },//MX25L1606E
	{ "MX25L3205D",         0xc2, 0x2016c220, 64 * 1024, 64,  0 },//MX25L3233F
	{ "MX25L6405D",         0xc2, 0x2017c220, 64 * 1024, 128, 0 },//MX25L6433F
	{ "MX25L12805D",        0xc2, 0x2018c220, 64 * 1024, 256, 0 },//MX25L12835F
	{ "MX25L25635E",        0xc2, 0x2019c220, 64 * 1024, 512, 1 },//MX25L25635F
	{ "MX25L51245G",        0xc2, 0x201ac220, 64 * 1024, 1024, 1 },
	{ "S25FL256S",          0x01, 0x02194D01, 64 * 1024, 512, 1 },
	{ "S25FL512S",          0x01, 0x02204D00, 64 * 1024, 512, 1 },//赛普拉斯的64M Flash,WSON-8封装
	{ "S25FL128P",          0x01, 0x20180301, 64 * 1024, 256, 0 },
	{ "S25FL129P",          0x01, 0x20184D01, 64 * 1024, 256, 0 },
	{ "S25FL164K",          0x01, 0x40170140, 64 * 1024, 128, 0 },
	{ "S25FL132K",          0x01, 0x40160140, 64 * 1024, 64,  0 },
	{ "S25FL032P",          0x01, 0x02154D00, 64 * 1024, 64,  0 },
	{ "S25FL064P",          0x01, 0x02164D00, 64 * 1024, 128, 0 },
	{ "S25FL116K",          0x01, 0x40150140, 64 * 1024, 32,  0 },
	{ "F25L64QA",           0x8c, 0x41170000, 64 * 1024, 128, 0 }, //ESMT
	{ "F25L32QA",           0x8c, 0x41168c41, 64 * 1024, 64,  0 }, //ESMT
	{ "EN25F16",            0x1c, 0x31151c31, 64 * 1024, 32,  0 },
	{ "EN25Q32B",           0x1c, 0x30161c30, 64 * 1024, 64,  0 },
	{ "EN25F32",            0x1c, 0x31161c31, 64 * 1024, 64,  0 },
	{ "EN25F64",            0x1c, 0x20171c20, 64 * 1024, 128, 0 },  // EN25P64
	{ "EN25Q64",            0x1c, 0x30171c30, 64 * 1024, 128, 0 },
	{ "W25Q32BV",           0xef, 0x40160000, 64 * 1024, 64,  0 },//W25Q32FV
	{ "W25X32VS",           0xef, 0x30160000, 64 * 1024, 64,  0 },
	{ "W25Q64BV",           0xef, 0x40170000, 64 * 1024, 128, 0 }, //S25FL064K //W25Q64FV
	{ "W25Q128BV",          0xef, 0x40180000, 64 * 1024, 256, 0 },//W25Q128FV
	{ "W25Q256FV",          0xef, 0x40190000, 64 * 1024, 512, 1 },
	{ "W25Q512JV",          0xef, 0x40200000, 64 * 1024, 1024, 1 },//Winbond公司的64M Flash
	{ "W25Q512JV-DTR",      0xef, 0x70200000, 64 * 1024, 1024, 1 },//Winbond公司的64M Flash,与上一款区别在于支持double transfer rate的读模式
	//{ "W25M512JV",          0xef, 0x71190000, 64 * 1024, 1024, 1 },//Winbond公司的64M Flash,由两片W25Q256拼装而成,不建议使用,能烧录系统并启动OpenWrt但会出问题,若要使用最好将sectors数量改为512,当成一片32M的Flash使用
	//{ "W25M512JW",          0xef, 0x61190000, 64 * 1024, 1024, 1 },//Winbond公司的64M Flash,由两片W25Q256拼装而成,不建议使用,能烧录系统并启动OpenWrt但会出问题,若要使用最好将sectors数量改为512,当成一片32M的Flash使用
	{ "N25Q032A13ESE40F",   0x20, 0xba161000, 64 * 1024, 64,  0 },
	{ "N25Q064A13ESE40F",   0x20, 0xba171000, 64 * 1024, 128, 0 },
	{ "N25Q128A13ESE40F",   0x20, 0xba181000, 64 * 1024, 256, 0 },
	{ "N25Q256A",       	0x20, 0xba191000, 64 * 1024, 512, 1 },
	{ "MT25QL512AB",    	0x20, 0xba201044, 64 * 1024, 1024, 1 },
	{ "GD25Q32B",           0xC8, 0x40160000, 64 * 1024, 64,  0 },
	{ "GD25Q64B",           0xC8, 0x40170000, 64 * 1024, 128, 0 },
	{ "GD25Q128C",          0xC8, 0x40180000, 64 * 1024, 256, 0 },

};
  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值