Greetings, I'm not familiar with that part, but I know that some flash parts that support block locking can also 'lock down' a block so that it can only be unlocked by power cycling. Any chance that's happening?
G'day, sjames On Mon, 1 Nov 2004, Donald Zoch wrote: > I'm trying to get the flash_rom program working on the SST49LF004B. > This is the part that is coming in our newer Arima HDAMA boards that > replaces the SST49LF040. It has the same id as the SST49LF004A, > but is different in that when we first started trying to flash it, the > flash looked like it worked but would never verify. I took a look > at the data sheet and from the looks of it there are these block locking > registers that the zero bit must be cleared in in order to write to > certain parts of the flash. At least that's why I think it's not > flashing. > > I'm trying to zero out the registers, but it appears as if the first > 4 cannot be cleared out. The last 4 look like they're being set to > zero. I have tried to calculate the register locations by looking > at the probe jedec code and seeing that the jedec ID registers are > at bios and bios + 0x01. I then looked in the data sheet at where those > registers appear in the memory map and then calculated the register > memory locations as offsets to bios, some negative offsets and some > positive. > > I've also tried anding that value with 0xFE just to zero out the bit > that I need, but that doesn't seem to work. I can never seem > to change the values in the first four registers. > > Do either of you have any pointers on how to get this to work? > I will attach the data sheet for the flash part. It's > the 49lf004b that I'm interested in. > > void unprotect_49lf004b(volatile unsigned char *bios) > { > *(volatile unsigned char *) (bios + 0x30002) = 0x00; > printf("REGISTER HAS VALUE 0x%x AFTER\n",*(volatile unsigned char *)(bios + > 0x30002)); > *(volatile unsigned char *) (bios + 0x20002) = 0x00; > printf("REGISTER HAS VALUE 0x%x AFTER\n",*(volatile unsigned char *)(bios + > 0x20002)); > *(volatile unsigned char *) (bios + 0x10002) = 0x00; > printf("REGISTER HAS VALUE 0x%x AFTER\n",*(volatile unsigned char *)(bios + > 0x10002)); > *(volatile unsigned char *) (bios + 0x00002) = 0x00; > printf("REGISTER HAS VALUE 0x%x AFTER\n",*(volatile unsigned char *)(bios + > 0x00002)); > *(volatile unsigned char *) (bios - 0xFFFE) = 0x00; > printf("REGISTER HAS VALUE 0x%x AFTER\n",*(volatile unsigned char *)(bios - > 0xFFFE)); > *(volatile unsigned char *) (bios - 0x1FFFE) = 0x00; > printf("REGISTER HAS VALUE 0x%x AFTER\n",*(volatile unsigned char *)(bios - > 0x1FFFE)); > *(volatile unsigned char *) (bios - 0x2FFFE) = 0x00; > printf("REGISTER HAS VALUE 0x%x AFTER\n",*(volatile unsigned char *)(bios - > 0x2FFFE)); > *(volatile unsigned char *) (bios - 0x3FFFE) = 0x00; > printf("REGISTER HAS VALUE 0x%x AFTER\n",*(volatile unsigned char *)(bios - > 0x3FFFE)); > } > > > Donald > ---- > Donald Zoch > Phone: (512) 602-7945 > Pager: (512) 604-5401 > [EMAIL PROTECTED] > ||||| |||| ||||||||||||| ||| by Linux Labs International, Inc. Steven James, CTO 55 Marietta Street Suite 1830 Atlanta, Ga 30303 866 824 9737 support _______________________________________________ Linuxbios mailing list [EMAIL PROTECTED] http://www.clustermatic.org/mailman/listinfo/linuxbios