X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fdrivers%2Fao_m25.c;h=accf943a3fbe6e079ad0825b21f53d08823828fb;hb=14f1e175af85c0ef4539316d5ce049798a878fcb;hp=72617cc4504f24f18966e1a80f1be4699d2a1fc9;hpb=0686a7b8aec524d81bda4c572549a3a068ce0eed;p=fw%2Faltos diff --git a/src/drivers/ao_m25.c b/src/drivers/ao_m25.c index 72617cc4..accf943a 100644 --- a/src/drivers/ao_m25.c +++ b/src/drivers/ao_m25.c @@ -82,11 +82,11 @@ uint16_t ao_storage_unit; */ #if M25_MAX_CHIPS > 1 -static uint8_t ao_m25_size[M25_MAX_CHIPS]; /* number of sectors in each chip */ +static uint32_t ao_m25_size[M25_MAX_CHIPS]; /* number of sectors in each chip */ static ao_port_t ao_m25_pin[M25_MAX_CHIPS]; /* chip select pin for each chip */ static uint8_t ao_m25_numchips; /* number of chips detected */ #endif -static uint8_t ao_m25_total; /* total sectors available */ +static uint32_t ao_m25_total; /* total sectors available */ static ao_port_t ao_m25_wip; /* write in progress */ static uint8_t ao_m25_mutex; @@ -101,12 +101,14 @@ static uint8_t ao_m25_mutex; static uint8_t ao_m25_instruction[4]; -#define M25_SELECT(cs) ao_spi_get_mask(AO_M25_SPI_CS_PORT,cs,AO_M25_SPI_BUS, AO_SPI_SPEED_FAST) +#define AO_M25_SPI_SPEED ao_spi_speed(10000000) /* this seems like a reasonable minimum speed to require */ + +#define M25_SELECT(cs) ao_spi_get_mask(AO_M25_SPI_CS_PORT,cs,AO_M25_SPI_BUS,AO_M25_SPI_SPEED) #define M25_DESELECT(cs) ao_spi_put_mask(AO_M25_SPI_CS_PORT,cs,AO_M25_SPI_BUS) #define M25_BLOCK_SHIFT 16 #define M25_BLOCK 65536L -#define M25_POS_TO_SECTOR(pos) ((uint8_t) ((pos) >> M25_BLOCK_SHIFT)) +#define M25_POS_TO_SECTOR(pos) ((uint32_t) ((pos) >> M25_BLOCK_SHIFT)) #define M25_SECTOR_TO_POS(sector) (((uint32_t) (sector)) << M25_BLOCK_SHIFT) /* @@ -123,7 +125,7 @@ ao_m25_wait_wip(ao_port_t cs) ao_spi_recv(ao_m25_instruction, 1, AO_M25_SPI_BUS); } while (ao_m25_instruction[0] & M25_STATUS_WIP); M25_DESELECT(cs); - ao_m25_wip &= ~cs; + ao_m25_wip &= (ao_port_t) ~cs; } } @@ -146,7 +148,7 @@ ao_m25_write_enable(ao_port_t cs) /* * Returns the number of 64kB sectors */ -static uint8_t +static uint32_t ao_m25_read_capacity(ao_port_t cs) { uint8_t capacity; @@ -172,7 +174,7 @@ ao_m25_set_address(uint32_t pos) { ao_port_t mask; #if M25_MAX_CHIPS > 1 - uint8_t size; + uint32_t size; uint8_t chip; for (chip = 0; chip < ao_m25_numchips; chip++) { @@ -190,9 +192,9 @@ ao_m25_set_address(uint32_t pos) #endif ao_m25_wait_wip(mask); - ao_m25_instruction[1] = pos >> 16; - ao_m25_instruction[2] = pos >> 8; - ao_m25_instruction[3] = pos; + ao_m25_instruction[1] = (uint8_t) (pos >> 16); + ao_m25_instruction[2] = (uint8_t) (pos >> 8); + ao_m25_instruction[3] = (uint8_t) (pos); return mask; } @@ -204,7 +206,8 @@ static uint8_t ao_m25_scan(void) { #if M25_MAX_CHIPS > 1 - uint8_t pin, size; + uint8_t pin; + uint32_t size; #endif if (ao_m25_total) @@ -239,7 +242,7 @@ ao_m25_scan(void) * Erase the specified sector */ uint8_t -ao_storage_erase(uint32_t pos) +ao_storage_device_erase(uint32_t pos) { ao_port_t cs; @@ -344,12 +347,12 @@ ao_storage_device_info(void) ao_mutex_put(&ao_m25_mutex); #if M25_MAX_CHIPS > 1 - printf ("Detected chips %d size %d\n", ao_m25_numchips, ao_m25_total); + printf ("Detected chips %d size %ld\n", ao_m25_numchips, ao_m25_total); for (chip = 0; chip < ao_m25_numchips; chip++) printf ("Flash chip %d select %02x size %d\n", chip, ao_m25_pin[chip], ao_m25_size[chip]); #else - printf ("Detected chips 1 size %d\n", ao_m25_total); + printf ("Detected chips 1 size %ld\n", ao_m25_total); #endif #if M25_DEBUG