X-Git-Url: https://hackdaworld.org/cgi-bin/gitweb.cgi?p=my-code%2Farm.git;a=blobdiff_plain;f=betty%2Fflash.c;h=5e1a593a3c22c8206822de342b29d69db8100ecb;hp=8d9c02a92e0685b2f878b3b7b6b341fe01a30f75;hb=HEAD;hpb=5da509dc909c60d63c5fba98e7ced43040eb6827 diff --git a/betty/flash.c b/betty/flash.c index 8d9c02a..5e1a593 100644 --- a/betty/flash.c +++ b/betty/flash.c @@ -10,7 +10,8 @@ /* * sector addresses */ -static unsigned long sector_address[19]={ + +unsigned long sector_address[20]={ 0x00000,0x02000,0x03000,0x04000,0x08000, 0x10000,0x18000, 0x20000,0x28000, @@ -18,7 +19,8 @@ static unsigned long sector_address[19]={ 0x40000,0x48000, 0x50000,0x58000, 0x60000,0x68000, - 0x70000,0x78000 + 0x70000,0x78000, + 0x80000 // not a sector, end of flash! }; /* @@ -27,30 +29,8 @@ static unsigned long sector_address[19]={ void flash_init(void) { - /* - * idle clocks between rad & write: 0+1 - * length of read access: 1+3 - * bls lines high during write access - * length of write access: 0+1 - * no write protect, no burst-rom - * 16 bit data width - */ - - BCFG0=0x10000420; // flash 1 - BCFG2=0x10000420; // flash 2 - - /* - * p3.27: write enable - * p3.25: chip select 2 - * p2.15 - p2.8: data bus - * a[1:15] -> address lines - */ - - PINSEL2=(PINSEL2&P2MASK)|(1<<8); - PINSEL2=(PINSEL2&P2MASK&~((1<<15)|(1<<14)))|(1<<14); - PINSEL2=(PINSEL2&P2MASK&~((1<<5)|(1<<4)))|(1<<4); - PINSEL2=(PINSEL2&P2MASK)|(1<<24); - PINSEL2=(PINSEL2&P2MASK&~((1<<27)|(1<<26)|(1<<25)))|(1<<27)|(1<<26); + flash_reset('0'); + flash_reset('2'); } void flash_reset(u8 bank) { @@ -96,6 +76,24 @@ void flash_sector_erase(u8 bank,u8 sector) { return; } +int flash_sec_erase(u32 addr) { + + u32 a18_12; + u32 base; + + a18_12=addr&0x00000fffff; + base=addr&0xff000000; + + *((volatile u16 *)(base|(0x555<<1)))=0xaa; + *((volatile u16 *)(base|(0x2aa<<1)))=0x55; + *((volatile u16 *)(base|(0x555<<1)))=0x80; + *((volatile u16 *)(base|(0x555<<1)))=0xaa; + *((volatile u16 *)(base|(0x2aa<<1)))=0x55; + *((volatile u16 *)(base|(a18_12<<1)))=0x30; + + return 0; +} + void flash_chip_erase(u8 bank) { u8 status;