2953|0

69

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

uclinux jedce_probe探测ID,变成flash的内容 [复制链接]

Flash:两片SST39VF3201 ,一片挂CS0:地址0x80000000 一片挂CS1:地址0x81000000
使用jecdec探测

  1. static struct map_info lpc24xx_map[2] = {
  2. {
  3.     .name =        "LPC24XX",
  4.     .bankwidth =    2,
  5.     .size =        0x400000,
  6.     .phys =        0x80000000,
  7. },{
  8.     .name =        "LPC24XX1",
  9.     .bankwidth =    2,
  10.     .size =        0x400000,
  11.     .phys =        0x81000000,
  12. }
  13. };

  14. //mtd驱动
  15. int __init lpc24xx_mtd_init(void)
  16. {
  17.     int i;
  18.     char    *part_type = NULL;

  19.     for(i=0;i<2;i++){
  20.         lpc24xx_map[i].virt = ioremap(flashphys[i], flashsize[i]);

  21.         if (!lpc24xx_map[i].virt) {
  22.             printk(KERN_ERR "LPC24XX-MTD: ioremap failed\n");
  23.             return -EIO;
  24.         }

  25.         simple_map_init(&lpc24xx_map[i]);

  26.         // Probe for flash bankwidth 4
  27.         printk (KERN_INFO "LPC24XX-MTD probing 16bit FLASH: i= %d phys=%08x\n", i, lpc24xx_map[i].phys);
  28.         mymtd[i] = do_map_probe("jedec_probe", &lpc24xx_map[i]);
  29. printk(KERN_INFO "Chow-> end of do map probe: jedec probe\n");
  30. /*
  31.     if (!mymtd) {
  32.         printk (KERN_INFO "LPC24XX-MTD probing 16bit FLASH\n");
  33.         // Probe for bankwidth 2
  34.         lpc24xx_map.bankwidth = 2;
  35.         mymtd = do_map_probe("cfi_probe", &lpc24xx_map);
  36.     }
  37. */        
  38.         if (mymtd[i]) {
  39.             mymtd[i]->owner = THIS_MODULE;

  40. #ifdef CONFIG_MTD_PARTITIONS
  41.         nr_mtd_parts[i] = parse_mtd_partitions(mymtd[i], probes, &mtd_parts[i], 0);
  42.         if (nr_mtd_parts[i] > 0)
  43.             part_type = "command line";
  44. #endif
  45.             if (nr_mtd_parts[i] <= 0) {
  46.                 if(i) {
  47. //            mtd_parts[i] = &lpc24xx_partitions1;
  48.                     mtd_parts[i] = lpc24xx_partitions1;
  49. //            nr_mtd_parts = NUM_PARTITIONS;
  50.                     nr_mtd_parts[i] = num_partitions[i];
  51.                     part_type = "builtin";
  52.                 }else{
  53.                                 mtd_parts[i] = lpc24xx_partitions;
  54. //                      nr_mtd_parts = NUM_PARTITIONS;
  55.                                 nr_mtd_parts[i] = num_partitions[i];
  56.                                 part_type = "builtin";
  57.                 }            
  58.             }
  59.         }else{
  60.             iounmap((void *)lpc24xx_map[i].virt);
  61. printk(KERN_INFO "Chow-> ENXIO\n");
  62.             //return -ENXIO;
  63.         }
  64.     }
  65.     for(i=0;i<2;i++){
  66.                 printk(KERN_INFO "Using %s partition table\n", part_type);
  67.                 add_mtd_partitions(mymtd[i], mtd_parts[i], nr_mtd_parts[i]);
  68.     }
  69. //                if(i) return 0;
  70. //                else continue;
  71.     return 0;
  72. }


复制代码



在启动信息中看到,能探测到第一片(0x80000000)的ID,0x235b
Search for id:(bf 235b) interleave(1) type(2)
MTD jedec_match(): Check fit 0x00000000 + 0x00400000 = 0x00400000
MTD jedec_match(): check unlock addrs 0x5555 0x2aaa
MTD jedec_match(): check ID's disappear when not in ID mode
reset unlock called 5555 2aaa   
chow->base =0x0 ofs=0x2
chow->mask =0xffff resul.x[0]=0x5619
MTD jedec_match(): return to ID mode
MTD jedec_probe_chip(): matched device 0xbf,0x235b unlock_addrs: 0x5555 0x2aaa
Found: SST 39VF3201
reset unlock called 5555 2aaa   
LPC24XX1: Found 1 x16 devices at 0x0 in 16-bit bank
number of JEDEC chips: 1

但是探测第2片(0x81000000)的ID时,读出的ID其实是flash存储的内容:
LPC24XX-MTD probing 16bit FLASH: i= 0 phys=81000000
reset unlock called 555 2aa   
chow->base =0x0 ofs=0x2
chow->mask =0xffff resul.x[0]=0x5656
Search for id:(1212 5656) interleave(1) type(2)
12是故意写入flash的内容,第2片flash的内容是123456789123456789.。。。
reset unlock called 555 aaa   
chow->base =0x0 ofs=0x2
chow->mask =0xffff resul.x[0]=0x5656
Search for id:(1212 5656) interleave(1) type(2)
reset unlock called 5555 2aaa   
chow->base =0x0 ofs=0x2
chow->mask =0xffff resul.x[0]=0x5656
Search for id:(1212 5656) interleave(1) type(2)
reset unlock called aaa 555   
chow->base =0x0 ofs=0x2
chow->mask =0xffff resul.x[0]=0x5656
Search for id:(1212 5656) interleave(1) type(2)
chow->base =0x0 ofs=0x2
chow->mask =0xffff resul.x[0]=0x5656
Search for id:(1212 5656) interleave(1) type(2)
chow->base =0x0 ofs=0x2


为什么读取SST芯片ID变成了读取了flash的内容???
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表