#include <io.h>
#include <iomacros.h>
-#include <spi.h>
+#include "spi.h"
//This could be more accurate.
//Does it ever need to be?
SETSS; //Raise !SS to end transaction.
}
-//! Write many blocks to the SPI Flash.
-void spiflash_pokeblocks(unsigned long adr,
- unsigned char *buf,
- unsigned int len){
- long off=0;//offset of this block
- int blen;//length of this block
- SETSS;
- spiflash_setstatus(0x02);
- spiflash_wrten();
-
- while(off<len){
- //calculate block length
- blen=(len-off>0x100?0x100:len-off);
- //write the block
- spiflash_pokeblock(adr+off,
- buf+off,
- blen);
- //add offset
- off+=blen;
- }
-}
-
//! Read a block to a buffer.
void spiflash_pokeblock(unsigned long adr,
unsigned char *buf,
SETSS;
- //while(spiflash_status()&0x01);//minor performance impact
+ //if(len!=0x100)
+ // debugstr("Non-standard block size.");
+
+ while(spiflash_status()&0x01);//minor performance impact
+
+ spiflash_setstatus(0x02);
+ spiflash_wrten();
//Are these necessary?
//spiflash_setstatus(0x02);
}
+//! Write many blocks to the SPI Flash.
+void spiflash_pokeblocks(unsigned long adr,
+ unsigned char *buf,
+ unsigned int len){
+ long off=0;//offset of this block
+ int blen;//length of this block
+ SETSS;
+
+ while(off<len){
+ //calculate block length
+ blen=(len-off>0x100?0x100:len-off);
+ //write the block
+ spiflash_pokeblock(adr+off,
+ buf+off,
+ blen);
+ //add offset
+ off+=blen;
+ }
+}
+
+
+
//! Peek some blocks.
void spiflash_peek(unsigned char app,
unsigned char verb,
P5OUT|=SS; //Raise !SS to end transaction.
}
+
+//! Erase a sector.
+void spiflash_erasesector(unsigned long adr){
+ //debugstr("Erasing a 4kB sector.");
+
+ //Write enable.
+ spiflash_wrten();
+
+ //Begin
+ CLRSS;
+
+ //Second command.
+ spitrans8(0x20);
+ //Send address
+ spitrans8((adr&0xFF0000)>>16);
+ spitrans8((adr&0xFF00)>>8);
+ spitrans8(adr&0xFF);
+
+ SETSS;
+ while(spiflash_status()&0x01);//while busy
+ //debugstr("Erased.");
+}
+
+
//! Handles a monitor command.
void spihandle(unsigned char app,
unsigned char verb,
cmddata+4,//buf
len-4);//len
- txdata(app,verb,len);
+ txdata(app,verb,0);
break;