Commit 20deeadd authored by Theodor-Adrian Stana's avatar Theodor-Adrian Stana Committed by Grzegorz Daniluk

Change flash function params to be similar to SDBFS

wrc_main still in test-mode, currently doing a read of the first two
sectors (in the purpose of testing flash-write in tools -- see next
commit)
parent 46955351
...@@ -65,11 +65,9 @@ static uint8_t bbspi_transfer(uint8_t cspin, uint8_t val) ...@@ -65,11 +65,9 @@ static uint8_t bbspi_transfer(uint8_t cspin, uint8_t val)
{ {
gpio_out(GPIO_SPI_MOSI, 0); gpio_out(GPIO_SPI_MOSI, 0);
} }
delay();
gpio_out(GPIO_SPI_SCLK, 1); gpio_out(GPIO_SPI_SCLK, 1);
retval <<= 1; retval <<= 1;
retval |= gpio_in(GPIO_SPI_MISO); retval |= gpio_in(GPIO_SPI_MISO);
delay();
val <<= 1; val <<= 1;
} }
...@@ -78,6 +76,9 @@ static uint8_t bbspi_transfer(uint8_t cspin, uint8_t val) ...@@ -78,6 +76,9 @@ static uint8_t bbspi_transfer(uint8_t cspin, uint8_t val)
return retval; return retval;
} }
/*
* Init function (just set the SPI pins for idle)
*/
void flash_init() void flash_init()
{ {
gpio_out(GPIO_SPI_NCS, 1); gpio_out(GPIO_SPI_NCS, 1);
...@@ -85,7 +86,10 @@ void flash_init() ...@@ -85,7 +86,10 @@ void flash_init()
gpio_out(GPIO_SPI_MOSI, 0); gpio_out(GPIO_SPI_MOSI, 0);
} }
void flash_write(int nrbytes, uint32_t addr, uint8_t *dat) /*
* Write data to flash chip
*/
int flash_write(uint32_t addr, uint8_t *buf, int count)
{ {
int i; int i;
...@@ -96,17 +100,20 @@ void flash_write(int nrbytes, uint32_t addr, uint8_t *dat) ...@@ -96,17 +100,20 @@ void flash_write(int nrbytes, uint32_t addr, uint8_t *dat)
bbspi_transfer(0,(addr & 0xFF0000) >> 16); bbspi_transfer(0,(addr & 0xFF0000) >> 16);
bbspi_transfer(0,(addr & 0xFF00) >> 8); bbspi_transfer(0,(addr & 0xFF00) >> 8);
bbspi_transfer(0,(addr & 0xFF)); bbspi_transfer(0,(addr & 0xFF));
for ( i = 0; i < nrbytes; i++ ) for ( i = 0; i < count; i++ )
{ {
mprintf("dat: %02x\n", dat[i]); bbspi_transfer(0,buf[i]);
bbspi_transfer(0,dat[i]);
} }
bbspi_transfer(1,0); bbspi_transfer(1,0);
return count;
} }
void flash_read(int nrbytes, uint32_t addr, uint8_t *dat) /*
* Read data from flash
*/
int flash_read(uint32_t addr, uint8_t *buf, int count)
{ {
int cnt = 0;
int i; int i;
bbspi_transfer(1,0); bbspi_transfer(1,0);
bbspi_transfer(0,0x0b); bbspi_transfer(0,0x0b);
...@@ -114,14 +121,18 @@ void flash_read(int nrbytes, uint32_t addr, uint8_t *dat) ...@@ -114,14 +121,18 @@ void flash_read(int nrbytes, uint32_t addr, uint8_t *dat)
bbspi_transfer(0,(addr & 0xFF00) >> 8); bbspi_transfer(0,(addr & 0xFF00) >> 8);
bbspi_transfer(0,(addr & 0xFF)); bbspi_transfer(0,(addr & 0xFF));
bbspi_transfer(0,0); bbspi_transfer(0,0);
for ( i = 0; i < count; i++ )
for ( i = 0; i < nrbytes; i++ )
{ {
dat[i] = bbspi_transfer(0, 0); buf[i] = bbspi_transfer(0, 0);
} }
bbspi_transfer(1,0); bbspi_transfer(1,0);
return count;
} }
/*
* Sector erase
*/
void flash_serase(uint32_t addr) void flash_serase(uint32_t addr)
{ {
bbspi_transfer(1,0); bbspi_transfer(1,0);
...@@ -134,6 +145,9 @@ void flash_serase(uint32_t addr) ...@@ -134,6 +145,9 @@ void flash_serase(uint32_t addr)
bbspi_transfer(1,0); bbspi_transfer(1,0);
} }
/*
* Read status register
*/
uint8_t flash_rsr() uint8_t flash_rsr()
{ {
uint8_t retval; uint8_t retval;
......
...@@ -41,10 +41,14 @@ ...@@ -41,10 +41,14 @@
#include "types.h" #include "types.h"
/* Flash interface functions */
void flash_init(); void flash_init();
void flash_write(int nrbytes, uint32_t addr, uint8_t *dat); int flash_write(uint32_t addr, uint8_t *buf, int count);
void flash_read(int nrbytes, uint32_t addr, uint8_t *dat); int flash_read(uint32_t addr, uint8_t *buf, int count);
void flash_serase(uint32_t addr); void flash_serase(uint32_t addr);
uint8_t flash_rsr(); uint8_t flash_rsr();
/* SDB flash interface functions */
#endif // __FLASH_H_ #endif // __FLASH_H_
...@@ -234,49 +234,51 @@ void w() ...@@ -234,49 +234,51 @@ void w()
int main(void) int main(void)
{ {
uint8_t rdat[256]; uint8_t rdat[256];
int i; int i;
check_reset(); check_reset();
wrc_ui_mode = UI_SHELL_MODE; wrc_ui_mode = UI_SHELL_MODE;
_endram = ENDRAM_MAGIC; _endram = ENDRAM_MAGIC;
sdb_find_devices(); sdb_find_devices();
uart_init_sw(); uart_init_sw();
uart_init_hw(); uart_init_hw();
timer_init(0); timer_init(0);
mprintf("preinit\n"); mprintf("preinit\n");
w(); w();
mprintf("flash init\n"); mprintf("flash init\n");
uint8_t d[4] = { 0x11, 0x22, 0x33, 0x44}; uint8_t d[4] = { 0xaa, 0xbb, 0xcc, 0xdd};
flash_init(); flash_init();
flash_read(256, 0x00, rdat); flash_read(0x00, rdat, 256);
for (i = 0; i < 256; i++) for (i = 0; i < 256; i++)
{ {
mprintf("0x%02x ", rdat[i]); mprintf("0x%02x ", rdat[i]);
} }
mprintf("\n"); mprintf("\n");
mprintf("erase\n"); // mprintf("erase\n");
flash_serase(0x00); // flash_serase(0x00);
while (flash_rsr() & 0x01) // while (flash_rsr() & 0x01)
; // ;
//
mprintf("write\n"); // mprintf("write\n");
flash_write(4, 0x00, d); // flash_write(0x00, d, 4);
flash_read(256, 0x00, rdat); // while (flash_rsr() & 0x01)
for (i = 0; i < 256; i++) // ;
{ flash_read(0x100, rdat, 256);
mprintf("0x%02x ", rdat[i]); for (i = 0; i < 256; i++)
} {
mprintf("\n"); mprintf("0x%02x ", rdat[i]);
}
mprintf("\n");
return 0;
return 0;
wrc_initialize(); wrc_initialize();
usleep_init(); usleep_init();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment