查看: 20008|回复: 63

[求助] 开发板替换SPI flash(w25q256fv)后如何修改uboot和kernel

    [复制链接]
发表于 2015-11-19 23:47:24 | 显示全部楼层 |阅读模式
如题,新的开发板替换了SPI flash,型号为w25q256fv,如何修改uboot和kernel内的读写flash的驱动啊?
谢谢各位大侠!
目前已经将flash的型号添加进去,启动时也可以读取到flash信息,但是启动内核的时候出现错误
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x02480000: 0x19f7 instead
下一步不知如何调整了!
楼主热帖
发表于 2018-5-21 10:12:13 | 显示全部楼层
哈哈哈我在这里分享一个解决换flash的方法(不一定适用所有flash):
硬件平台:hi3536(本身支持Winbond 32MB)
换成的flash类型:w25m512jv(64MB)
# 方法:(uboot和kernel同理,以uboot为原型)
## 模仿 32M的驱动添加相应部分
    *  drivers/mtd/spi/hisfc350/hisfc350_spi_ids.c,添加设备ID,所需的模式,频率等等,和32M类似
    *  mtd/spi/hisfc350/hisfc350_spi_xxx.c 添加相应的适配驱动函数,和32M类似
    *  drivers/mtd/spi/hisfc350/hisfc350.c  由于64M为32M的堆积版本,就是64M等于两个32M(不适用其它flash芯片);
        但是这里是一定要100%要参考的是flash数据手册,注意这是堆在一起,所以注意切换,
        几个区域之间的初始化都要分别做(初始化所以区块都要做,因为是独立的),
        而且要注意一个bug:在flash驱动的退出函数中,注意要在退出之前把flash读写区块切换回uboot区块,
        否则会出现不断电重启起不来的问题(flash读写任然在非启动区块)
   *  要看数据手册来解决问题,或者Google,baidu搜索在其它芯片上已经实现的代码,进行参考。
发表于 2017-3-17 16:57:36 | 显示全部楼层
Benz 发表于 2016-12-5 10:59
请问解决了吗?  8PIN 和16PIN 的 32M flash ,  管脚功能有差异,  会是这个原因吗?  软件上又是怎么解 ...

你好~不知道你遇到的情况解决了么? W25Q256FV  最新的海思SDK是支持的,s60版本,可以直接使用。关于3byte 和4byte 启动方式也看了不少帖子,我以前默认按3BYTE可以正常启动(未修改SDK)。 关于8PIN和16PIN FLASH 有一定区别的,我现在就遇到这个问题。FLASH - rst 管脚不同,16PIN_rst 是独立的,8PIN_rst 是复用的。uboot启动-默认SPI是单线1XIO模式。内核和文件系统默认是4XIO SPI启动。软复位或者按键复位时,16PIN—flash 可以正常启动,8PIN-flash 无法启动。4XIO SPI 模式,PINI_RST 是无用的。 我现在用的就是8PIN的FLASH,无法软复位重启,必须断电重启。有什么解决办法么?
PS: HI3516A平台
发表于 2016-11-30 17:29:48 | 显示全部楼层
遇到同样的问题,有人可以帮忙解决一下吗?
发表于 2016-6-23 16:51:43 | 显示全部楼层
怎么解决的?楼主能解释下思路么。我的HI3520D,spi FLASH 8 PIN MX25L25635F,换成 16pin的就不行了,不知道怎么回事
发表于 2016-4-12 22:00:41 | 显示全部楼层
楼主 解决了吗?我最近遇到跟你一样的问题 hi3518e 用w25q256fv的flash 在uboot下不能读写flash。你是怎么解决的?
发表于 2015-11-20 08:56:22 | 显示全部楼层
例如:3520D
uboot-Hi3520D-bvt_No1_660_330_660_ddr_innerFEPHY.xls 产生一个文件,然后mkboot.sh;
在uboot_tools目录下,看文档吧,很简单的。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2015-11-20 15:27:59 | 显示全部楼层
myearth 发表于 2015-11-20 08:56
例如:3520D
uboot-Hi3520D-bvt_No1_660_330_660_ddr_innerFEPHY.xls 产生一个文件,然后mkboot.sh;
在u ...

谢谢!
我用的SPI芯片在这个表格里没有,那样的话是不是得修改kernel的hisfc300new_spi_ids.c部分啊?
我在代码里已经增加了这个芯片的支持,增加了如下代码
#include "hisfc300new_spi_w25q256fv.c"
static struct spi_driver  spi_driver_w25q256fv = {
        .wait_ready   = spi_general_wait_ready,
        .write_enable = spi_general_write_enable,
        .entry_4addr  = spi_w25q256fv_entry_4addr,
        .bus_prepare  = spi_general_bus_prepare,
        .qe_enable = spi_general_qe_enable,
};




        {
                "W25Q256FV", {0xEF, 0x40, 0x19}, 3, _32M, _64K, 3,
                {
                        &READ_STD(0, INFINITE, 33),
                        &READ_FAST(1, INFINITE, 104),
                        &READ_DUAL(1, INFINITE, 104),
                        &READ_QUAD(1, INFINITE, /*70*/80),
                        0
                },

                {
                        &WRITE_STD(0, 256, 104),
                        &WRITE_QUAD(0, 256, /*70*/80),
                        0
                },

                {
                        &ERASE_SECTOR_64K(0, _64K, 104),
                        0
                },
                &spi_driver_w25q256fv,
        },




不知标红的数值是否需要修正?

目前使用编译出来的内核出现错误,
Spi id table Version 1.22
Hisilicon Spi Flash Controller V300 New Device Driver, Version 1.10
Check Spi Flash Controller V300 New.
Found
Spi(cs1) ID: 0xEF 0x40 0x19 0x00 0x00 0x00
Spi(cs1):
Block:64KB
Chip:32MB
Name:"W25Q256FV"
spi size: 0x33554432
chip num: 1
4 cmdlinepart partitions found on MTD device hi_sfc
Creating 4 MTD partitions on "hi_sfc":
0x000000000000-0x000000100000 : "boot"
0x000000100000-0x000000500000 : "kernel"
0x000000500000-0x000001f00000 : "rootfs"
0x000001f00000-0x000002000000 : "config"
Special nand id table Version 1.35
Hisilicon Nand Flash Controller V301 Device Driver, Version 1.10
Nand ID: 0x40 0x40 0x40 0x40 0x40 0x40 0x40 0x40
No NAND device found.
Fixed MDIO Bus: probed
usbcore: registered new interface driver rt2500usb
usbcore: registered new interface driver rt73usb
usbmon: debugfs is not available
ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver
hiusb-ehci hiusb-ehci.0: HIUSB EHCI
hiusb-ehci hiusb-ehci.0: new USB bus registered, assigned bus number 1
hiusb-ehci hiusb-ehci.0: irq 63, io mem 0x100b0000
hiusb-ehci hiusb-ehci.0: USB 0.0 started, EHCI 1.00
hub 1-0:1.0: USB hub found
hub 1-0:1.0: 2 ports detected
ohci_hcd: USB 1.1 'Open' Host Controller (OHCI) Driver
hiusb-ohci hiusb-ohci.0: HIUSB OHCI
hiusb-ohci hiusb-ohci.0: new USB bus registered, assigned bus number 2
hiusb-ohci hiusb-ohci.0: irq 64, io mem 0x100a0000
hub 2-0:1.0: USB hub found
hub 2-0:1.0: 2 ports detected
usbcore: registered new interface driver cdc_acm
cdc_acm: USB Abstract Control Model driver for USB modems and ISDN adapters
usbcore: registered new interface driver cdc_wdm
Initializing USB Mass Storage driver...
usbcore: registered new interface driver usb-storage
USB Mass Storage support registered.
usbcore: registered new interface driver ums-alauda
usbcore: registered new interface driver ums-datafab
usbcore: registered new interface driver ums-freecom
usbcore: registered new interface driver ums-isd200
usbcore: registered new interface driver ums-jumpshot
usbcore: registered new interface driver ums-sddr09
usbcore: registered new interface driver ums-sddr55
usbcore: registered new interface driver mdc800
mdc800: v0.7.5 (30/10/2000):USB Driver for Mustek MDC800 Digital Camera
mousedev: PS/2 mouse device common for all mice
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
TCP cubic registered
Initializing XFRM netlink socket
NET: Registered protocol family 17
NET: Registered protocol family 15
lib80211: common routines for IEEE802.11 drivers
Registering the dns_resolver key type
registered taskstats version 1
ata1: SATA link down (SStatus 0 SControl 300)
ata2: SATA link down (SStatus 0 SControl 300)
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000000: 0x998d instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000004: 0x88ab instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000008: 0xeeee instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000000c: 0x8889 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000010: 0x8888 instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000014: 0x888a instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000018: 0xd99d instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x0000001c: 0x8c8b instead
jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found at 0x00000020: 0xffce instead

从信息看spi flash已经找到,但是读出的jiffs文件系统有问题,不知如何进一步解决了,麻烦不吝赐教!谢过!
发表于 2015-11-20 15:30:04 | 显示全部楼层
本帖最后由 myearth 于 2015-11-20 15:33 编辑

不用改代码啊,只需要修改hi_boot的配置。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2015-11-20 15:34:20 | 显示全部楼层
然后mkboot.sh 命令(linux下)
有没有Hi3520D IIC驱动啊,还有NVP6114?
 楼主| 发表于 2015-11-20 15:40:13 | 显示全部楼层
附图是我的sdk中对应的flash配置部分

里面没有我所使用的芯片,怎么修改呢?
请详细说下吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2015-11-20 15:47:25 | 显示全部楼层
w25q128fv和w25q128就是我自己添加的,对下pdf,添加一个
 楼主| 发表于 2015-11-20 15:55:01 | 显示全部楼层
w25q128在hisfc200new_spi_ids.c中是支持的
        {
                "W25Q128BV", {0xEF, 0x40, 0x18}, 3, _16M, _64K, 3,
                {
                        &READ_STD(0, INFINITE, 33),
                        &READ_FAST(1, INFINITE, 104),
                        &READ_DUAL(1, INFINITE, 104),
                        &READ_QUAD(1, INFINITE, /*70*/80),
                        0
                },

                {
                        &WRITE_STD(0, 256, 104),
                        &WRITE_QUAD(0, 256, /*70*/80),
                        0
                },

                {
                        &ERASE_SECTOR_64K(0, _64K, 104),
                        0
                },
                &spi_driver_general,
        },

应该是不需要修改的代码,而我的w25q256fv里面没有,
我不清楚w25q128fv和w25q128的Nand ID和w25q256fv是不是一样,
w25q256fv的Nand ID是Spi(cs1) ID: 0xEF 0x40 0x19 0x00 0x00 0x00

方便的话你能帮我看一下吗?
 楼主| 发表于 2015-11-20 15:59:05 | 显示全部楼层
从内核代码看,如果Spi ID不同的话,spi控制器就识别不出是哪类spi芯片
发表于 2015-11-20 16:02:04 | 显示全部楼层
本帖最后由 myearth 于 2015-11-20 16:04 编辑

ID:EF 40 19 copy128的配置,修改大小等参数就好吧

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
 楼主| 发表于 2015-11-20 16:25:47 | 显示全部楼层
myearth 发表于 2015-11-20 16:02
ID:EF 40 19 copy128的配置,修改大小等参数就好吧

谢谢!我试验一下!
 楼主| 发表于 2015-11-20 16:40:56 | 显示全部楼层
zhangtower 发表于 2015-11-20 16:25
谢谢!我试验一下!

另外还有个问题,这种改法适合uboot和kernel吗?uboot和kernel都不用修改源码了吗?
 楼主| 发表于 2015-11-20 16:42:30 | 显示全部楼层
myearth 发表于 2015-11-20 16:02
ID:EF 40 19 copy128的配置,修改大小等参数就好吧

另外还有个问题,这种改法适合uboot和kernel吗?uboot和kernel都不用修改源码了吗?
发表于 2015-12-3 23:29:11 | 显示全部楼层
你好,我刚入手开发板也碰到这问题,你现在解决了吗!指导下!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

© 2008-2017 当前位置 易百纳技术社区论坛 返回 易百纳技术社区 ( 苏ICP备14036084 )   Powered by Discuz! X3.1
快速回复 返回顶部 返回列表