flash info.

 32 typedef struct {
 33     ulong   size;           /* total bank size in bytes     */
 34     ushort  sector_count;       /* number of erase units        */
 35     ulong   flash_id;       /* combined device & manufacturer code  */
 36     ulong   start[CONFIG_SYS_MAX_FLASH_SECT];   /* virtual sector start address */
 37     uchar   protect[CONFIG_SYS_MAX_FLASH_SECT]; /* sector protection status */
 38 #ifdef CONFIG_SYS_FLASH_CFI                                                                                            
 39     uchar   portwidth;      /* the width of the port        */
 40     uchar   chipwidth;      /* the width of the chip        */
 41     ushort  buffer_size;        /* # of bytes in write buffer       */
 42     ulong   erase_blk_tout;     /* maximum block erase timeout      */
 43     ulong   write_tout;     /* maximum write timeout        */
 44     ulong   buffer_write_tout;  /* maximum buffer write timeout     */
 45     ushort  vendor;         /* the primary vendor id        */
 46     ushort  cmd_reset;      /* vendor specific reset command    */
 47     ushort  interface;      /* used for x8/x16 adjustments      */
 48     ushort  legacy_unlock;      /* support Intel legacy (un)locking */
 49     uchar   manufacturer_id;    /* manufacturer id          */
 50     ushort  device_id;      /* device id                */
 51     ushort  device_id2;     /* extended device id           */
 52     ushort  ext_addr;       /* extended query table address     */
 53     ushort  cfi_version;        /* cfi version              */
 54     ushort  cfi_offset;     /* offset for cfi query         */
 55     ulong   addr_unlock1;       /* unlock address 1 for AMD flash roms  */
 56     ulong   addr_unlock2;       /* unlock address 2 for AMD flash roms  */
 57     const char *name;       /* human-readable name                  */
 58 #endif
 59 } flash_info_t;

flash_fill_sect_ranges() find the flash sector about the addr you point out when erase flash.

需要用到flash_info,这个变量是在flash_init()里初始化的.

delete define of CONFIG_SYS_FLASH_CFI? means what?

 

 

 28 COBJS-$(CONFIG_MTD_PARTITIONS) += mtdcore.o mtdpart.o
 29 COBJS-$(CONFIG_HAS_DATAFLASH) += at45.o
 30 COBJS-$(CONFIG_FLASH_CFI_DRIVER) += cfi_flash.o
 31 COBJS-$(CONFIG_FLASH_CFI_MTD) += cfi_mtd.o                                                                             
 32 COBJS-$(CONFIG_HAS_DATAFLASH) += dataflash.o
 33 COBJS-$(CONFIG_FLASH_CFI_LEGACY) += jedec_flash.o
 34 COBJS-$(CONFIG_MW_EEPROM) += mw_eeprom.o

 

common/Makefile

 COBJS-$(CONFIG_CMD_FLASH) += cmd_flash.o

COBJS-$(CONFIG_CMD_SF) += cmd_sf.o  

 

in cmd_sf.c

182 U_BOOT_CMD(
183     sf, 5,  1,  do_spi_flash,
184     "SPI flash sub-system",
185     "probe [bus:]cs [hz] [mode] - init flash device on given SPI bus/n"
186     "                 and chip select/n"
187     "sf read addr offset len    - read `len' bytes starting at/n"
188     "                 `offset' to memory at `addr'/n"
189     "sf write addr offset len   - write `len' bytes from memory/n"
190     "                 at `addr' to flash at `offset'/n"
191     "sf erase offset len        - erase `len' bytes from `offset'/n");

 

如果执行"erase"命令,调用顺序是U_BOOT_CMD->do_flerase()->flash_sect_erase(), in cmd_flash.c

 

 

# sf probe
 8 MB
exit spi_flash_probe
<cmd_sf.c>(do_spi_flash_probe)[61]
<cmd_sf.c>(do_spi_flash_probe)[66]

看来flash这个结构体没有赋值好.

今天就到这吧.

 

 

11/29/2010

         printf("flash name[%d] = %s/n", i, params->name);  打印不出来,死机.

 

409     printf("flash name = %s/n", stm->flash.name); 也会死机,看来和%s有关.

 先临时赋值给stm->flash.name了,看来是那个spi flash 结构体的排列问题,导致name取不出正确的值来显示,然后死机.

 

现在好像flash还是工作在4M模式,擦offset=0,就是擦bfc.

sflash的erase write read的驱动,都要使用bfc那个地址,I don't know why. now erase, write, read is ok.

串行flash的loader都要烧到flash的最开始位置?不用管bfc?

 

 

现在tftp的方式启动kernel 后,会死机,

Registering unionfs 2.2-mm
msgmni has been set to 82
Block layer SCSI generic (bsg) driver version 0.4 loaded (major 253)
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
LTT : ltt-relay init
i8042.c: i8042 controller self test timeout.
Serial: 8250/16550 driver2 ports, IRQ sharing disabled
serial8250: ttyS0 at MMIO 0x10101003 (irq = 56) is a 16550A
brd: module loaded
nec_candy: 10/100 Ethernet driver v0.4 (June 20, 2006)
nec_candy: Probe candy chip at 0x10012000, irq 44, Phy ID 0x00000001, MAC Addr 0
0:00:4c:80:92:a1
console [netcon0] enabled
netconsole: network logging started
i2c /dev entries driver
Driver 'sd' needs updating - please use bus_type methods
Driver 'sr' needs updating - please use bus_type methods
physmap platform flash device: 00800000 at 1f800000

看来如果要kernel启动起来,需要加上kernel中sflash的驱动.

 

 

就这样吧,没时间弄了,交给后面的工程师弄吧.

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值