// --------------------------------------------------------------------------- // Transfiere un buffer a la memoria FLASH // --------------------------------------------------------------------------- // void SPI_TransferMsg ( UINT8 HdrLen, UINT8 DataLen, UINT8* MsgPtr ) { UINT8 TmpData; UINT8 * HdrPtr; HdrPtr = SpiBuf; flash_cs_l(); while(HdrLen){ REFRESH_WATCHDOG; TmpData = *HdrPtr; *HdrPtr = flash_spi(TmpData); HdrPtr++; HdrLen--; } while(DataLen){ REFRESH_WATCHDOG; TmpData = *MsgPtr; *MsgPtr = flash_spi(TmpData); MsgPtr++; DataLen--; } flash_cs_h(); }
void program_page(int page) { int flash_addr = page_to_flash(page); unsigned int i; unsigned char data; unsigned char data1; flash_spi(ARRAY_READ); flash_spi((flash_addr >> 8) & 0xff); flash_spi(flash_addr & 0xff); for (i=0; i < 5; i++) { flash_spi(0); } for (i = 0; i < 128; i++) { data = flash_spi(0); data1 = flash_spi(0); bg_spi(0x40); bg_spi(0x00); bg_spi(i); bg_spi(data); bg_spi(0x48); bg_spi(0x00); bg_spi(i); bg_spi(data1); } bg_spi(0x4c); bg_spi((page >> 1) & 0xff); bg_spi((page << 7) & 0xff ); bg_spi(0x00); }
// read the parameters from the flash; right now just reads the length of the // program. int read_params() { int i; int retval; flash_cmd(ARRAY_READ, 0,0, 4); /* flash_spi(ARRAY_READ); flash_spi(0); flash_spi(0); flash_spi(4);*/ for (i=0; i < 4; i++) { flash_spi(0); } retval = flash_spi(0) & 0xff; retval += (flash_spi(0) << 8); return retval; }
int error_code(short errno) { pulse_flash_cs(); flash_cmd(PAGE_TO_BUFFER_XFER,0,0,0); pulse_flash_cs(); flash_cmd(BUFFER_WRITE, 0,0,8); flash_spi(errno & 0xff); flash_spi((errno >> 8) & 0xff); return 1; }
char program_enable() { int ntries, end,i; unsigned char foo; unsigned char resp[6]; #ifdef FULLPC __sda_string_[0] = 0; __mosi_string_[0] = 0; #endif MAKE_BIG_GUY_RESET_OUTPUT(); CLR_SCK_PIN(); CLR_BIG_GUY_RESET_PIN(); wait(); wait(); i = 0; pulse_flash_cs(); for (end=0; end < 5000; end++) { wait(); } for(end = 0, ntries = 32; (end == 0) && (ntries >0); ntries--) { bg_spi(0xac); bg_spi(0x53); foo = bg_spi(0x00); if (foo == 0x53) { end = 1; } else { CLR_SCK_PIN(); wait(); wait(); SET_SCK_PIN(); wait(); wait(); } bg_spi(0x00); if (i <6) resp[i++] = foo; } if (end == 0) { flash_cmd(BUFFER_WRITE, 0,0,10); for (i=0; i < 6; i++) flash_spi(resp[i]); pulse_flash_cs(); wait_ms(20); return 0; } printf("%s\n", __mosi_string_); printf("%s\n", __sda_string_); return 1; }
void flash_cmd(char cmd, char p1, char p2, char p3) { flash_spi(cmd); flash_spi(p1); flash_spi(p2); flash_spi(p3); }