移植uboot之修改代码支持NorFlash记录续集
接着上一篇文章写的内容(上一篇文章链接:移植uboot之修改代码支持NORFLASH),上一篇结尾测试flash的擦除读写功能,结果无法写flash,卡在了这里:
前面已经擦除成功,这里写内容写不进去,显示没有擦除成功。一开始怀疑是不是硬件问题,后来用好的uboot试了一下,是可以实现写功能的,所以排除了硬件的问题。软件有问题?看一下代码关于擦除读写的内容吧,根据串口打印的消息搜索字符串信息:Copy to Flash… 以及Flash not Erased信息。
通过搜索相关字符串消息,搜索到Cfi_flash.c中有函数:write_buff这个函数,这个函数里面有
rc = flash_write_cfiword (info, wp, cword); if (rc != 0)
return rc;
.......if ((rc = flash_write_cfibuffer (info, wp, src, i)) != ERR_OK)return rc;
.......if ((rc = flash_write_cfiword (info, wp, cword)) != 0)
return rc;
......if ((rc = flash_write_cfiword (info, wp, cword)) != 0)return rc;
......return flash_write_cfiword (info, wp, cword);
通过将上面几个判断语句屏蔽掉,然后重新编译,测试,发现可以写flash了,那么接下来就该看是哪个判断语句执行了导致无法写flash的。
通过逐个将上面结合判断语句屏蔽,最后发现是执行了这些:
while (cnt >= info->portwidth) {cword.l = 0;for (i = 0; i < info->portwidth; i++) {flash_add_byte (info, &cword, *src++);}if ((rc = flash_write_cfiword (info, wp, cword)) != 0)return rc; //lyy
才导致的无法写flash,心累啊,调试过程漫长啊,烧写编译烧写编译烧写。。。。。不过找到了问题所在,我很开心!!!
由上面代码知结构体数据info->portwidth这一项出了问题,也就是flash的端口宽度有问题。跳转到函数:flash_write_cfiword:
/*-----------------------------------------------------------------------*/
static int flash_write_cfiword (flash_info_t * info, ulong dest,cfiword_t cword)
{void *dstaddr = (void *)dest;int flag;flash_sect_t sect = 0;char sect_found = 0;/* Check if Flash is (sufficiently) erased */switch (info->portwidth) {case FLASH_CFI_8BIT:flag = ((flash_read8(dstaddr) & cword.c) == cword.c);break;case FLASH_CFI_16BIT:flag = ((flash_read16(dstaddr) & cword.w) == cword.w);break;case FLASH_CFI_32BIT:flag = ((flash_read32(dstaddr) & cword.l) == cword.l);break;case FLASH_CFI_64BIT:flag = ((flash_read64(dstaddr) & cword.ll) == cword.ll);break;default:flag = 0;break;}if (!flag)return ERR_NOT_ERASED;...........................
...........................
...........................//省略号代表后面还有其他代码
我将上面的判断语句屏蔽掉,重新烧写启动,果然,可以正常写FLASH。看来问题就是出在上面的switch (info->portwidth)结构中,端口宽度的问题!!!!
现在想想应该是哪里错了呢?
1.排除硬件问题,因为我烧写uboot都是通过旧的uboot烧写新的uboot,中间存在擦除与写flash操作
2.这之前修改代码涉及到flash端口宽度的操作的有哪些?看来是当初加这个结构体时有问题:
/* jz2440使用的是MX29LV160DB芯片 */{.mfr_id = (u16)MX_MANUFACT, /*厂家ID*/.dev_id = 0x2249, /*设备ID*/.name = "MXIC MX29LV160DB",.uaddr = { /*NOR FLASH看到的解锁地址*/[0] = MTD_UADDR_0x0555_0x02AA /* x16 */},.DevSize = SIZE_2MiB, /* 总大小 */.CmdSet = P_ID_AMD_STD,.NumEraseRegions= 4, /* 擦除区域的数目 */.regions = { ERASEINFO(16*1024, 1),ERASEINFO(8*1024, 2),ERASEINFO(32*1024, 1),ERASEINFO(64*1024, 31),}},
看来是这句话的问题了,[0] = MTD_UADDR_0x0555_0x02AA /* x16 */,我们的16位宽,应该是1,将其改成:
[1] = MTD_UADDR_0x0555_0x02AA /* x16 */
重新编译uboot,烧写测试:
一个字:完美!!!!!
感慨一下这次的调试过程:提升了一个档次吧~(之前挺菜的)
想获得各种学习资源以及交流学习的加我:
qq:1126137994
微信:liu1126137994
可以共同交流关于嵌入式,操作系统,C++语言,C语言,数据结构等技术问题!
移植uboot之修改代码支持NorFlash记录续集相关推荐
- 移植uboot之修改代码支持NorFlash记录续集二
先说一个事:我会在最后把移植好的uboot,内核,分别做一个补丁文件,以后如果用到相同的uboot以及内核都可以直接下载我这个补丁进行打补丁操作就可以直接用~ 上一个移植uboot续集,我们解决了无法 ...
- 移植uboot之修改代码支持NorFlash记录
学习交流加 个人qq: 1126137994 个人微信: liu1126137994 学习交流资源分享qq群: 962535112 今天我们的任务是修改uboot源码支持NorFlash. 上两篇关于 ...
- jz2440开发板移植U-boot之修改代码支持DM9000网卡
今天我们来移植U-boot到jz2440开发板,修改代码支持DM9000网卡.查看之前写的移植记录请点击链接:点击查看之前的移植记录 现在大多数开发板都支持DM9000网卡.我们的U-boot源码里面 ...
- 五、移植u-boot-2016.03到Jz2440之修改代码支持NOR Flash
5. 移植u-boot-2016.03修改代码支持NOR Flash 从上一节把uboot烧写到NAND启动后,最后打印出Flash: 0 Bytes,如下图所示.我们的Jz2440开发板的NOR F ...
- 移植u-boot-2012.04.01到jz2440开发板之修改代码支持NAND启动
上一篇文章我们已经修改了uboot源码使其能够正常打印输出了,但是输出停到了nand启动那里,所以这篇文章就来记录如何修改源码使uboot支持NAND启动. 原来的代码在链接时加了"-pie ...
- 移植uboot第九步:支持yaffs映像烧写
写在前面: 我的博客已迁移至自建服务器:博客传送门,CSDN博客暂时停止,如有机器学习方面的兴趣,欢迎来看一看. 此外目前我在gitHub上准备一些李航的<统计学习方法>的实现算法,目标将 ...
- 1--新唐nuc980 NUC980移植 UBOOT,从外部mx25l启动
1.下载官方源码U-boot 2.修改配置支持外部spi nor flash https://blog.csdn.net/LOTOOHE/article/details/114291715 3.增加C ...
- 移植U-BOOT之裁剪和修改默认参数(易用性)启动内核,以及对uboot进行分区
今天我们来裁剪U-BOOT,使其更加易用,修改默认参数,以及制作最终修改好得补丁文件方便以后的快速移植. 那么如果想看之前的关于网卡以及flash等的移植,请点击链接查看:点击链接查看 在裁剪修改之前 ...
- TQ2440的学习——UBOOT移植(串口控制台的支持)
这里让UBOOT使用串口作为控制台输出,必须要保证串口功能被完善的支持.不过在启动到初始化串口功能之前,我们必须保证前面的初始化功能能顺利走完. 先来看看UBOOT的一个启动流程: UBOOT起始代码 ...
最新文章
- 如何修改IE的默认标题
- DedeCMS Wap.php绑定域名的方法
- 腾讯开源国际化新突破,将紧密参与全球开源治理
- Angular 自定义结构化指令,如何传入多个输入参数
- ACM算法--二分法--模板
- cannot load php5,Cannot load php5apache2_4.dll into server解决办法
- jQuery 基础事件
- Kafka Partition Leader选举机制原理详解
- 是夫妻就一起把它戒了吧!
- jmeter学习总结
- 《王道计算机网络》学习笔记总目录+思维导图
- Stemming词干提取 和 Lemmatization 词形还原
- 02_如何计算叔块奖励
- oracle 数据占百分比,占总数比例怎么算_占总金额百分比公式
- 数字化闯入“深水区”,超级营销平台是突破口吗?
- 英雄之盾-第11届蓝桥杯Scratch省赛真题第4题
- 微贷网java高级开发工程师
- 在单点登录中,如果cookie被禁用了怎么办?
- 程序员薪酬到底有多高?来看硅谷的工程师统计
- 九州量子黄蕾蕾:我们是冲着量子通信产业化来的