X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fdrivers%2Fao_m25.c;h=390637d7fd116b5c39889b4ed65df295d6d6e1b5;hb=fb0fb6f4beab484e7fe55b39d18c1f19778f1211;hp=28cb1dd73078ab71492fe033e8ba30d933888070;hpb=128bbfa150f88c09f7adde2434b7bf0b5a9ed556;p=fw%2Faltos diff --git a/src/drivers/ao_m25.c b/src/drivers/ao_m25.c index 28cb1dd7..390637d7 100644 --- a/src/drivers/ao_m25.c +++ b/src/drivers/ao_m25.c @@ -29,6 +29,7 @@ __pdata uint32_t ao_storage_config; /* Storage unit size - device reads and writes must be within blocks of this size. Usually 256 bytes. */ __pdata uint16_t ao_storage_unit; +#define M25_DEBUG 0 /* * Each flash chip is arranged in 64kB sectors; the * chip cannot erase in units smaller than that. @@ -99,8 +100,8 @@ static __xdata uint8_t ao_m25_mutex; static __xdata uint8_t ao_m25_instruction[4]; -#define M25_SELECT(cs) ao_spi_get_mask(SPI_CS_PORT,cs) -#define M25_DESELECT(cs) ao_spi_put_mask(SPI_CS_PORT,cs) +#define M25_SELECT(cs) ao_spi_get_mask(AO_M25_SPI_CS_PORT,cs,AO_M25_SPI_BUS, AO_SPI_SPEED_FAST) +#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 @@ -116,9 +117,9 @@ ao_m25_wait_wip(uint8_t cs) if (ao_m25_wip & cs) { M25_SELECT(cs); ao_m25_instruction[0] = M25_RDSR; - ao_spi_send(ao_m25_instruction, 1); + ao_spi_send(ao_m25_instruction, 1, AO_M25_SPI_BUS); do { - ao_spi_recv(ao_m25_instruction, 1); + 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; @@ -135,7 +136,7 @@ ao_m25_write_enable(uint8_t cs) { M25_SELECT(cs); ao_m25_instruction[0] = M25_WREN; - ao_spi_send(&ao_m25_instruction, 1); + ao_spi_send(&ao_m25_instruction, 1, AO_M25_SPI_BUS); M25_DESELECT(cs); ao_m25_wip |= cs; } @@ -150,8 +151,8 @@ ao_m25_read_capacity(uint8_t cs) uint8_t capacity; M25_SELECT(cs); ao_m25_instruction[0] = M25_RDID; - ao_spi_send(ao_m25_instruction, 1); - ao_spi_recv(ao_m25_instruction, M25_RDID_LEN); + ao_spi_send(ao_m25_instruction, 1, AO_M25_SPI_BUS); + ao_spi_recv(ao_m25_instruction, M25_RDID_LEN, AO_M25_SPI_BUS); M25_DESELECT(cs); /* Check to see if the chip is present */ @@ -183,7 +184,7 @@ ao_m25_set_address(uint32_t pos) chip = ao_m25_pin[chip]; #else - chip = M25_CS_MASK; + chip = AO_M25_SPI_CS_MASK; #endif ao_m25_wait_wip(chip); @@ -210,7 +211,7 @@ ao_m25_scan(void) #if M25_MAX_CHIPS > 1 ao_m25_numchips = 0; for (pin = 1; pin != 0; pin <<= 1) { - if (M25_CS_MASK & pin) { + if (AO_M25_SPI_CS_MASK & pin) { size = ao_m25_read_capacity(pin); if (size != 0) { ao_m25_size[ao_m25_numchips] = size; @@ -221,7 +222,7 @@ ao_m25_scan(void) } } #else - ao_m25_total = ao_m25_read_capacity(M25_CS_MASK); + ao_m25_total = ao_m25_read_capacity(AO_M25_SPI_CS_MASK); #endif if (!ao_m25_total) return 0; @@ -253,7 +254,7 @@ ao_storage_erase(uint32_t pos) __reentrant ao_m25_instruction[0] = M25_SE; M25_SELECT(cs); - ao_spi_send(ao_m25_instruction, 4); + ao_spi_send(ao_m25_instruction, 4, AO_M25_SPI_BUS); M25_DESELECT(cs); ao_m25_wip |= cs; @@ -280,8 +281,8 @@ ao_storage_device_write(uint32_t pos, __xdata void *d, uint16_t len) __reentrant ao_m25_instruction[0] = M25_PP; M25_SELECT(cs); - ao_spi_send(ao_m25_instruction, 4); - ao_spi_send(d, len); + ao_spi_send(ao_m25_instruction, 4, AO_M25_SPI_BUS); + ao_spi_send(d, len, AO_M25_SPI_BUS); M25_DESELECT(cs); ao_mutex_put(&ao_m25_mutex); @@ -306,8 +307,8 @@ ao_storage_device_read(uint32_t pos, __xdata void *d, uint16_t len) __reentrant /* No need to use the FAST_READ as we're running at only 8MHz */ ao_m25_instruction[0] = M25_READ; M25_SELECT(cs); - ao_spi_send(ao_m25_instruction, 4); - ao_spi_recv(d, len); + ao_spi_send(ao_m25_instruction, 4, AO_M25_SPI_BUS); + ao_spi_recv(d, len, AO_M25_SPI_BUS); M25_DESELECT(cs); ao_mutex_put(&ao_m25_mutex); @@ -330,7 +331,9 @@ ao_storage_setup(void) void ao_storage_device_info(void) __reentrant { +#if M25_DEBUG uint8_t cs; +#endif #if M25_MAX_CHIPS > 1 uint8_t chip; #endif @@ -348,16 +351,17 @@ ao_storage_device_info(void) __reentrant printf ("Detected chips 1 size %d\n", ao_m25_total); #endif +#if M25_DEBUG printf ("Available chips:\n"); for (cs = 1; cs != 0; cs <<= 1) { - if ((M25_CS_MASK & cs) == 0) + if ((AO_M25_SPI_CS_MASK & cs) == 0) continue; ao_mutex_get(&ao_m25_mutex); M25_SELECT(cs); ao_m25_instruction[0] = M25_RDID; - ao_spi_send(ao_m25_instruction, 1); - ao_spi_recv(ao_m25_instruction, M25_RDID_LEN); + ao_spi_send(ao_m25_instruction, 1, AO_M25_SPI_BUS); + ao_spi_recv(ao_m25_instruction, M25_RDID_LEN, AO_M25_SPI_BUS); M25_DESELECT(cs); printf ("Select %02x manf %02x type %02x cap %02x uid %02x\n", @@ -368,15 +372,11 @@ ao_storage_device_info(void) __reentrant ao_m25_instruction[M25_UID_OFFSET]); ao_mutex_put(&ao_m25_mutex); } +#endif } void ao_storage_device_init(void) { - /* Set up chip select wires */ - SPI_CS_PORT |= M25_CS_MASK; /* raise all CS pins */ - SPI_CS_DIR |= M25_CS_MASK; /* set CS pins as outputs */ -#ifdef SPI_CS_SEL - SPI_CS_SEL &= ~M25_CS_MASK; /* set CS pins as GPIO */ -#endif + ao_spi_init_cs (AO_M25_SPI_CS_PORT, AO_M25_SPI_CS_MASK); }