Benz

Benz

0个粉丝

29

问答

0

专栏

0

资料

Benz  发布于  2016-12-04 19:55:03
采纳率 0%
29个问答
6307

关于32MBytes SPI flash 换到开发板后,无法正常读写的疑问

 
本帖最后由 Benz 于 2016-12-6 16:31 编辑

        环境:  基于Hi3518a的产品, 8脚的Winbond系列flash  W25X256FV  (32MByets)

        如题,将原有的MIXC 系列16M的SPI flash换成 Winbond  W25X256FV  (32MByets),按照海思官方的资料,修改了SDK包中的表格  ( “ osdrv/tools/pc_tools/uboot_tools”目录下的配置表格 ),重新编译生成了板子可用的u-boot-200MHz.bin 。烧写之后,在uboot下通过串口设置内核启动的环境变量,写入到flash中,发现重新上电之后,环境变量的值没有改变,写入失败。

        从硬件管脚接线 到 软件u-boot的支持 两个角度思考后,目前还是没有解决这个问题, 没有思路, 请求指点,困惑中......
       
        提前感谢关注帖子的坛友
我来回答
回答8个
时间排序
认可量排序

Benz

0个粉丝

29

问答

0

专栏

0

资料

Benz 2016-12-06 16:38:51
认可0
问题已经解决  参考论坛前辈的经验  
[url=http://www.ebaina.com/bbs/thread-9713-1-1.html] 3516A SPI Flash使用32MB(MX25L25635F)无法启动[/url]
[url=http://www.ebaina.com/bbs/thread-9363-1-1.html]开发板替换SPI flash(w25q256fv)后如何修改uboot和kernel[/url]

修改如下:
(1)首先按照要求 将新flash信息添加到execl中,最终生成u-boot-200MHz.bin
(2)u-boot和内核的修改  
        hisfc350_spi_w25q256fv.c中加了启动前复位(出处来自上面的链接 在此鸣谢)。
        hisfc350_spi_ids.c中会识别到具体flash芯片的ID,并实现flash的读写和擦除。我在“uboot代码中搜索W25Q256字段,找到设置相应读写方式的代码,屏蔽除STD读,STD写的其余方式”。

aa421701136

1个粉丝

17

问答

0

专栏

0

资料

aa421701136 2017-03-06 11:15:45
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=42516&ptid=13572]Benz 发表于 2016-12-6 16:38[/url]
问题已经解决  参考论坛前辈的经验  
  3516A SPI Flash使用32MB(MX25L25635F)无法启动
开发板替换SPI  ...[/quote]

你好。我这边也要添加一个spi flash。然后我打开excel表格,使用add flash part来添加flash信息,报错了。我觉得add flash part只能在main标签页添加一行,但是不会在Flash Type标签页添加一行。
我这边整了两天了,也没成功。所以想请教下,你是如何将新flash信息添加到excel中。

Benz

0个粉丝

29

问答

0

专栏

0

资料

Benz 2017-03-06 14:47:05
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=46074&ptid=13572]aa421701136 发表于 2017-3-6 11:15[/url]
你好。我这边也要添加一个spi flash。然后我打开excel表格,使用add flash part来添加flash信息,报错了 ...[/quote]

你好, 添加flash芯片的信息,不是在main标签页的 "add flash part"这里, 直接在Flash Type 那里添加, 添加好了之后 回到main标签页 点击“generate reg bin file”,此时就会在该目录下生成reg_info.bin。

aa421701136

1个粉丝

17

问答

0

专栏

0

资料

aa421701136 2017-03-07 11:31:09
认可0
你好。我也试过在Flash Type那里添加,添加好了之后,回到main标签页,点击“generate reg bin file”,产生reg_info.bin。但我使用二进制比较工具,发现产生的reg_info.bin和系统原有的reg_info.bin是一样的。

Benz

0个粉丝

29

问答

0

专栏

0

资料

Benz 2017-03-07 11:38:35
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=46166&ptid=13572]aa421701136 发表于 2017-3-7 11:31[/url]
你好。我也试过在Flash Type那里添加,添加好了之后,回到main标签页,点击“generate reg bin file”,产 ...[/quote]

这个我没比较过, 代码部分相应的也改一改, 试试看行不。
你改过 3bytes和4bytes模式吗?

aa421701136

1个粉丝

17

问答

0

专栏

0

资料

aa421701136 2017-03-07 11:47:38
认可0
本帖最后由 aa421701136 于 2017-3-7 11:50 编辑

hisfc350_spi_ids.c:
        {
                "W25Q256FV", {0xEF, 0x40, 0x19}, 3, _32M, _64K, 4,
                {
                        &READ_STD(0, INFINITE, 33),
//                        &READ_FAST(1, INFINITE, 104),
//                        &READ_DUAL(1, INFINITE, 104),
//#ifndef CONFIG_CLOSE_SPI_8PIN_4IO
//                        &READ_QUAD(1, INFINITE, 80),
//#endif
                        0
                },

                {
                        &WRITE_STD(0, 256, 104),
//#ifndef CONFIG_CLOSE_SPI_8PIN_4IO
//                        &WRITE_QUAD(0, 256, 80),
//#endif
                        0
                },

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

hisfc350_spi_w25q256fv.c:
static int spi_w25q256fv_entry_4addr(struct hisfc_spi *spi, int enable)
{
        struct hisfc_host *host = (struct hisfc_host *)spi->host;

        if (spi->addrcycle != SPI_4BYTE_ADDR_LEN)
                return 0;
        /* This chip should not enable write here,
         * we have confirmed with the WINBOND */
        /* spi->driver->write_enable(spi); */
////////////////////////////////////////////////////////////////////////////////////        
spi->driver->write_enable(spi);


        enable=1;

hisfc_write(host, HISFC350_CMD_INS, SPI_CMD_FIRST_RESET_4ADDR);
                hisfc_write(host, HISFC350_CMD_CONFIG,
                        HISFC350_CMD_CONFIG_SEL_CS(spi->chipselect)
                        | HISFC350_CMD_CONFIG_START);


                HISFC350_CMD_WAIT_CPU_FINISH(host);


                hisfc_write(host, HISFC350_CMD_INS, SPI_CMD_SECOND_RESET_4ADDR);
                hisfc_write(host, HISFC350_CMD_CONFIG,
                        HISFC350_CMD_CONFIG_SEL_CS(spi->chipselect)
                        | HISFC350_CMD_CONFIG_START);

                HISFC350_CMD_WAIT_CPU_FINISH(host);
                //if (DEBUG_SPI)
                        printf("now W25Q256FV 6699 cmd\n");
////////////////////////////////////////////////////////////////////////////////////  
        if (enable) {
                hisfc_write(host, HISFC350_CMD_INS, SPI_CMD_EN4B);
                if (DEBUG_SPI)
                        printf("now w25q256fv is 4-byte address mode\n");

                hisfc_write(host, HISFC350_CMD_CONFIG,
                        HISFC350_CMD_CONFIG_SEL_CS(spi->chipselect)
                        | HISFC350_CMD_CONFIG_START);

                HISFC350_CMD_WAIT_CPU_FINISH(host);
        } else {
/* reset cmd */
                hisfc_write(host, HISFC350_CMD_INS, SPI_CMD_FIRST_RESET_4ADDR);
                hisfc_write(host, HISFC350_CMD_CONFIG,
                        HISFC350_CMD_CONFIG_SEL_CS(spi->chipselect)
                        | HISFC350_CMD_CONFIG_START);


                HISFC350_CMD_WAIT_CPU_FINISH(host);


                hisfc_write(host, HISFC350_CMD_INS, SPI_CMD_SECOND_RESET_4ADDR);
                hisfc_write(host, HISFC350_CMD_CONFIG,
                        HISFC350_CMD_CONFIG_SEL_CS(spi->chipselect)
                        | HISFC350_CMD_CONFIG_START);

                HISFC350_CMD_WAIT_CPU_FINISH(host);
                //if (DEBUG_SPI)
                        printf("now W25Q256FV 6699 cmd\n");
        }
////////////////////////////////////////////////////////////////////////////////////        
        hisfc_write(host, HISFC350_CMD_CONFIG,
                HISFC350_CMD_CONFIG_SEL_CS(spi->chipselect)
                | HISFC350_CMD_CONFIG_DATA_CNT(1)
                | HISFC350_CMD_CONFIG_DATA_EN
                | HISFC350_CMD_CONFIG_START);

        HISFC350_CMD_WAIT_CPU_FINISH(host);

////////////////////////////////////////////////////////////////////////////////////   
        host->set_host_addr_mode(host, enable);

        return 0;
}


我按照你里面的那两个链接,改了上面的两个文件。但是改和没改,感觉都一样。 串口都是只打印:System startup,就没显示其它的内容了。

Benz

0个粉丝

29

问答

0

专栏

0

资料

Benz 2017-03-07 11:53:35
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=46169&ptid=13572]aa421701136 发表于 2017-3-7 11:47[/url]
hisfc350_spi_ids.c:
        {
                "W25Q256FV", {0xEF, 0x40, 0x19}, 3, _32M, _64K, 4,
[/quote]

改好之后,启动u-boot 应该打印出 检测到的新的SPI flash的ID ,还会打印这句话now W25Q256FV 6699 cmd

aa421701136

1个粉丝

17

问答

0

专栏

0

资料

aa421701136 2017-03-07 13:53:12
认可0
可能我的还不光是spi flash的问题。因为串口只打印System startup。我再找找看这是什么原因。
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区