projects
/
fw
/
altos
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
altos: Add HAS_COMPANION to new boards with companion connectors
[fw/altos]
/
src
/
drivers
/
ao_m25.c
diff --git
a/src/drivers/ao_m25.c
b/src/drivers/ao_m25.c
index c807cd686cb053c06921395d81448f82ec18a8cc..e6c7bb4db0c0f8d5e23a66261d8de690546e24bc 100644
(file)
--- 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;
/* 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.
/*
* Each flash chip is arranged in 64kB sectors; the
* chip cannot erase in units smaller than that.
@@
-81,11
+82,11
@@
__pdata 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 */
#if M25_MAX_CHIPS > 1
static uint8_t ao_m25_size[M25_MAX_CHIPS]; /* number of sectors in each chip */
-static
uint8_t ao_m25_pin[M25_MAX_CHIPS];
/* chip select pin for 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 uint8_t ao_m25_numchips; /* number of chips detected */
#endif
static uint8_t ao_m25_total; /* total sectors available */
-static
uint8_t ao_m25_wip;
/* write in progress */
+static
ao_port_t ao_m25_wip;
/* write in progress */
static __xdata uint8_t ao_m25_mutex;
static __xdata uint8_t ao_m25_mutex;
@@
-99,7
+100,7
@@
static __xdata uint8_t ao_m25_mutex;
static __xdata uint8_t ao_m25_instruction[4];
static __xdata uint8_t ao_m25_instruction[4];
-#define M25_SELECT(cs) ao_spi_get_mask(AO_M25_SPI_CS_PORT,cs,AO_M25_SPI_BUS)
+#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_DESELECT(cs) ao_spi_put_mask(AO_M25_SPI_CS_PORT,cs,AO_M25_SPI_BUS)
#define M25_BLOCK_SHIFT 16
@@
-111,7
+112,7
@@
static __xdata uint8_t ao_m25_instruction[4];
* Block until the specified chip is done writing
*/
static void
* Block until the specified chip is done writing
*/
static void
-ao_m25_wait_wip(
uint8
_t cs)
+ao_m25_wait_wip(
ao_port
_t cs)
{
if (ao_m25_wip & cs) {
M25_SELECT(cs);
{
if (ao_m25_wip & cs) {
M25_SELECT(cs);
@@
-131,7
+132,7
@@
ao_m25_wait_wip(uint8_t cs)
* so that future operations will block until the WIP bit goes off
*/
static void
* so that future operations will block until the WIP bit goes off
*/
static void
-ao_m25_write_enable(
uint8
_t cs)
+ao_m25_write_enable(
ao_port
_t cs)
{
M25_SELECT(cs);
ao_m25_instruction[0] = M25_WREN;
{
M25_SELECT(cs);
ao_m25_instruction[0] = M25_WREN;
@@
-145,7
+146,7
@@
ao_m25_write_enable(uint8_t cs)
* Returns the number of 64kB sectors
*/
static uint8_t
* Returns the number of 64kB sectors
*/
static uint8_t
-ao_m25_read_capacity(
uint8
_t cs)
+ao_m25_read_capacity(
ao_port
_t cs)
{
uint8_t capacity;
M25_SELECT(cs);
{
uint8_t capacity;
M25_SELECT(cs);
@@
-165,12
+166,13
@@
ao_m25_read_capacity(uint8_t cs)
return 1 << (capacity - 0x10);
}
return 1 << (capacity - 0x10);
}
-static
uint8
_t
+static
ao_port
_t
ao_m25_set_address(uint32_t pos)
{
ao_m25_set_address(uint32_t pos)
{
-
uint8_t chip
;
+
ao_port_t mask
;
#if M25_MAX_CHIPS > 1
uint8_t size;
#if M25_MAX_CHIPS > 1
uint8_t size;
+ uint8_t chip;
for (chip = 0; chip < ao_m25_numchips; chip++) {
size = ao_m25_size[chip];
for (chip = 0; chip < ao_m25_numchips; chip++) {
size = ao_m25_size[chip];
@@
-181,16
+183,16
@@
ao_m25_set_address(uint32_t pos)
if (chip == ao_m25_numchips)
return 0xff;
if (chip == ao_m25_numchips)
return 0xff;
-
chip
= ao_m25_pin[chip];
+
mask
= ao_m25_pin[chip];
#else
#else
-
chip
= AO_M25_SPI_CS_MASK;
+
mask
= AO_M25_SPI_CS_MASK;
#endif
#endif
- ao_m25_wait_wip(
chip
);
+ 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] = pos >> 16;
ao_m25_instruction[2] = pos >> 8;
ao_m25_instruction[3] = pos;
- return
chip
;
+ return
mask
;
}
/*
}
/*
@@
-238,7
+240,7
@@
ao_m25_scan(void)
uint8_t
ao_storage_erase(uint32_t pos) __reentrant
{
uint8_t
ao_storage_erase(uint32_t pos) __reentrant
{
-
uint8_t
cs;
+
ao_port_t
cs;
if (pos >= ao_storage_total || pos + ao_storage_block > ao_storage_total)
return 0;
if (pos >= ao_storage_total || pos + ao_storage_block > ao_storage_total)
return 0;
@@
-248,7
+250,6
@@
ao_storage_erase(uint32_t pos) __reentrant
cs = ao_m25_set_address(pos);
cs = ao_m25_set_address(pos);
- ao_m25_wait_wip(cs);
ao_m25_write_enable(cs);
ao_m25_instruction[0] = M25_SE;
ao_m25_write_enable(cs);
ao_m25_instruction[0] = M25_SE;
@@
-267,7
+268,7
@@
ao_storage_erase(uint32_t pos) __reentrant
uint8_t
ao_storage_device_write(uint32_t pos, __xdata void *d, uint16_t len) __reentrant
{
uint8_t
ao_storage_device_write(uint32_t pos, __xdata void *d, uint16_t len) __reentrant
{
-
uint8_t
cs;
+
ao_port_t
cs;
if (pos >= ao_storage_total || pos + len > ao_storage_total)
return 0;
if (pos >= ao_storage_total || pos + len > ao_storage_total)
return 0;
@@
-294,7
+295,7
@@
ao_storage_device_write(uint32_t pos, __xdata void *d, uint16_t len) __reentrant
uint8_t
ao_storage_device_read(uint32_t pos, __xdata void *d, uint16_t len) __reentrant
{
uint8_t
ao_storage_device_read(uint32_t pos, __xdata void *d, uint16_t len) __reentrant
{
-
uint8_t
cs;
+
ao_port_t
cs;
if (pos >= ao_storage_total || pos + len > ao_storage_total)
return 0;
if (pos >= ao_storage_total || pos + len > ao_storage_total)
return 0;
@@
-330,7
+331,9
@@
ao_storage_setup(void)
void
ao_storage_device_info(void) __reentrant
{
void
ao_storage_device_info(void) __reentrant
{
- uint8_t cs;
+#if M25_DEBUG
+ ao_port_t cs;
+#endif
#if M25_MAX_CHIPS > 1
uint8_t chip;
#endif
#if M25_MAX_CHIPS > 1
uint8_t chip;
#endif
@@
-348,6
+351,7
@@
ao_storage_device_info(void) __reentrant
printf ("Detected chips 1 size %d\n", ao_m25_total);
#endif
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 ((AO_M25_SPI_CS_MASK & cs) == 0)
printf ("Available chips:\n");
for (cs = 1; cs != 0; cs <<= 1) {
if ((AO_M25_SPI_CS_MASK & cs) == 0)
@@
-368,6
+372,7
@@
ao_storage_device_info(void) __reentrant
ao_m25_instruction[M25_UID_OFFSET]);
ao_mutex_put(&ao_m25_mutex);
}
ao_m25_instruction[M25_UID_OFFSET]);
ao_mutex_put(&ao_m25_mutex);
}
+#endif
}
void
}
void