最经搞关于zynq7000,用到了petalinux,其中用的内核版本为xlnx4.0。再处理nandflash问题是,发现如下问题,阅读关于与扩展地址操作的原代码,从纸面上看应该属于一个小bug。原代码如下:

行号:333

/*
 * Update Extended Address/bank selection Register.
 * Call with flash->lock locked.
 */
static int write_ear(struct spi_nor *nor, u32 addr)
{
u8 code;    //操作代码声明
u8 ear;
int ret;

/* Wait until finished previous write command. */
if (spi_nor_wait_till_ready(nor))
return 1;

if (nor->mtd->size <= (0x1000000) << nor->shift)
return 0;

addr = addr % (u32) nor->mtd->size;
ear = addr >> 24;

if ((!nor->isstacked) && (ear == nor->curbank))
return 0;

if (nor->isstacked && (nor->mtd->size <= 0x2000000))
return 0;

if (nor->jedec_id == CFI_MFR_AMD)
code = SPINOR_OP_BRWR;      //amd器件的操作代码
if (nor->jedec_id == CFI_MFR_ST) {
write_enable(nor);
code = SPINOR_OP_WREAR;   //st的操作代码
}
nor->cmd_buf[0] = ear;

ret = nor->write_reg(nor, code, nor->cmd_buf, 1, 0);
if (ret < 0)
return ret;

nor->curbank = ear;

return 0;
}

以上代码中不难看出,code没有默认值,中途只处理了AMD和ST器件的操作码,应该是一个bug,同样的问题在read_ear函数中也存在,摘录源码如下:

行号:240

/**
 * read_ear - Get the extended/bank address register value
 * @nor: Pointer to the flash control structure
 *
 * This routine reads the Extended/bank address register value
 *
 * Return: Negative if error occured.
 */
static int read_ear(struct spi_nor *nor, struct flash_info *info)
{
int ret;
u8 val;
u8 code;   //code未初始化

/* This is actually Spansion */
if (JEDEC_MFR(info) == CFI_MFR_AMD)
code = SPINOR_OP_BRRD;    //amd操作码
/* This is actually Micron */
else if (JEDEC_MFR(info) == CFI_MFR_ST)
code = SPINOR_OP_RDEAR;  //st操作码
else
return -EINVAL;         //其他的推出,此处应该有问题

ret = nor->read_reg(nor, code, &val, 1);
if (ret < 0)
return ret;

return val;
}

不难看出代码中code没有默认值,而且只处理了AMD和ST的器件,应属于bug,

至于怎么处理,大家是大牛,见仁见智,就不在此赘述了

xlnx4.0中关于SPI-nor-flash的一个小bug相关推荐

  1. windows中的一个小bug

    无意中发现的windows的一个小bug,同时按下"ctrl"键和"alt"键时,过一秒钟左右cpu占用就会达到100%,在两台机器试验了一下都这样.因为也不是 ...

  2. iOS 15.0+ 中 SwiftUI 顶部或底部悬浮功能小面板的极简实现

    功能需求 我们有时需要在 App 主视图的顶部或底部固定悬浮放置一个功能视图: 如上图所示,我们将一个列表项目输入小面板按需放在主视图的顶部或底部: 当放置在顶部时,解决了其对导航栏(Navigati ...

  3. 如何写一个能被手机打开的C语言小程序,如何用C语言中一些简单的语句做一个小程序,能够输入一个字符就会弹出一句话...

    满意答案 lyj1260 2015.03.28 采纳率:43%    等级:11 已帮助:6408人 这个不难,是最基本的C语言程序了,我写个示例给你 #include //包含头 int main( ...

  4. 关于storm0.10.0版本的一个小bug

    最近搭建了一个storm环境,发现在提交一个topology之后,supervisor总是会无缘无故的死掉,日志如下 [2000] the maxSleepTimeMs [60000] the max ...

  5. linux host命令超时,Linux中的PING命令。每日一个小知识。不怕学不会

    PING(数据包Internet Groper)命令用于检查主机与服务器/主机之间的网络连接.该命令以IP地址或URL为输入,并通过消息" PING"将数据包发送到指定的地址,并记 ...

  6. 学习过程中遇到的一些电脑上的小BUG,非学习问题,实时更新

    1.电脑桌面上有一个"关闭"字样的的小方框解决方法 电脑桌面上莫名出现有个"关闭"字样的小方框按钮,但无论怎么点击他都没有反应,而且会存在在各个页面上方 ,看着 ...

  7. 在latex中使用数学花体的一个小bug

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 编译错误 ...

  8. STM32F10X SPI操作flash MX25L64读写数据

    STM32F10X SPI操作flash MX25L64读写数据 前一段时间在弄SPI,之前没接触过嵌入式外围应用,就是单片机也只接触过串口通信,且也是在学校的时候了.从离开手机硬件测试岗位后,自己一 ...

  9. STM32F10X SPI操作flash MX25L64读写数据(转)

    源:STM32F10X SPI操作flash MX25L64读写数据 前一段时间在弄SPI,之前没接触过嵌入式外围应用,就是单片机也只接触过串口通信,且也是在学校的时候了.从离开手机硬件测试岗位后,自 ...

最新文章

  1. linux下查看Mysql默认编码、修改默认编码
  2. python input与返回值-Python 详解基本语法_函数_返回值
  3. 四个C++函数模板实例
  4. JavaScript设置对象的不可拓展
  5. html文件嵌入到reportlab,Reportlab学习笔记
  6. 模拟FCFS调度算法(先来先服务)没错,是篇好文章!
  7. VS 2019 16.11正式发布 | 新功能(Hot Reload 热重载)试用
  8. LeetCode 1426. 数元素(哈希set)
  9. Nginx学习日记第五篇 -- upstream及fastcgi
  10. centOS 8 操作系统下载与安装
  11. win7安装注意事项及一些美化设置
  12. android app后台运行
  13. 零基础Java难学吗?自学怎么样?
  14. 简单的python画图代码_python opencv实现简易画图板
  15. 写论文第一步——查文献的方法
  16. android 应用程序Activity管理类
  17. Android Snackbar控件
  18. MySQL之初识MySQL
  19. toad for mysql_toad for mysql
  20. idea 调整字体间距

热门文章

  1. CentOS7的网卡设置
  2. 微信小程序实现分享海报
  3. 编写病人医院看病模拟程序
  4. 持续集成:Jenkins pipeline全局变量
  5. madplay命令使用(Linux音乐播放器)
  6. DOCTYPE声明方式
  7. 使用xdebug调试php详细教程 原创
  8. 敏捷测试:十招玩转敏捷测试
  9. Linux——TeamCity安装
  10. Cakewalk Sonar Platinum v23.10 WiN 老牌音乐制作软件中文版