//coded by geohot, anonymous, and gray //thanks to anonymous for the baseband "toolchain" //just download arm-elf and run the bat file typedef volatile unsigned int vu32; typedef volatile unsigned short vu16; typedef volatile unsigned char vu8; //UART0 #define USART0_TXB *(vu32*)0xF1000020 #define USART0_RXB *(vu32*)0xF1000024 #define USART0_FCSTAT *(vu32*)0xF1000068 #define USART0_ICR *(vu32*)0xF1000070 #define WDT_CON0 *(vu32*)0xF4400024 #define WDT_CON1 *(vu32*)0xF4400028 #define WDT_STAT *(vu32*)0xF440002C //the top 4 bytes are the current wdt #define STM_CLC *(vu32*)0xf4b00000 #define STM_TIM4 *(vu32*)0xf4b00020 //EBU #define SDRMREF0 *(vu32*)0xF0000040 #define SDRMCON0 *(vu32*)0xF0000050 #define SDRMOD0 *(vu32*)0xF0000060 #define ADDRSEL0 *(vu32*)0xF0000080 #define ADDRSEL1 *(vu32*)0xF0000088 #define ADDRSEL4 *(vu32*)0xF00000A8 #define BUSCON0 *(vu32*)0xF00000C0 #define BUSCON1 *(vu32*)0xF00000C8 #define BUSCON4 *(vu32*)0xF00000E0 #define NOR ((unsigned char*)0xA0000000) #define NORWORD ((unsigned short int*)0xA0000000) #define MEM ((unsigned char*)0xA8000000) unsigned char uart_rx_byte(void); void uart_tx_byte(unsigned char byte); void disablewdt(); void initflash(); void sendflashreset(); void halt(); void sendflashcmd(unsigned char cmd); //void writeblock(int block, short int bytestowrite); void readblock(int block, int length); void writeblock(int block, int length); void eraseblock(int addr); int main() { unsigned int i=0; unsigned short int j=0; disablewdt(); initflash(); uart_tx_byte('U'); unsigned char waitbyte; do { waitbyte = uart_rx_byte(); } while(waitbyte!=0xCC); uart_tx_byte('T'); if(NOR[0]!=0x7E) //Make sure tp removed { uart_tx_byte('F'); halt(); } /*for(i=0x3F0000;i<0x400000;i+=0x1000) { eraseblock(i); } sendflashreset(); uart_tx_byte('E'); writeblock(0x3F0000,0x10000);*/ //WRITE NOR writeblock(0x20000,0x2E4000); uart_tx_byte('D'); halt(); return 0; } /* void writeblock(int addr, short int bytestowrite) { unsigned int i; //first unlock the block NOR[addr]=0xFF; NOR[addr]=0x60; NOR[addr]=0xD0; //Unlock NOR[addr]=0xFF; NOR[addr]=0xE9; // NOR[addr]=0xE8; while(NOR[addr]&0x80!=0x80); //wait for it to be ready uart_tx_byte(NOR[addr]); NORWORD[addr/2]=bytestowrite-1; //send size for(i=0;i