1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
From 7c98d3e14bb68686acfdf67b6642a7012c7dd4da Mon Sep 17 00:00:00 2001
From: Jared Boone <jboone@earfeast.com>
Date: Fri, 28 Aug 2015 12:48:05 -0700
Subject: [PATCH 57/68] Add W25Q80BV function to fast-read from device.
---
firmware/common/w25q80bv.c | 22 ++++++++++++++++++++++
firmware/common/w25q80bv.h | 3 +++
2 files changed, 25 insertions(+)
--- a/firmware/common/w25q80bv.c
+++ b/firmware/common/w25q80bv.c
@@ -198,3 +198,25 @@
w25q80bv_page_program(drv, addr, len, data);
}
}
+
+void w25q80bv_read(uint32_t addr, uint32_t len, uint8_t* const data)
+{
+ uint32_t i;
+
+ /* do nothing if we would overflow the flash */
+ if ((len > W25Q80BV_NUM_BYTES) || (addr > W25Q80BV_NUM_BYTES)
+ || ((addr + len) > W25Q80BV_NUM_BYTES))
+ return;
+
+ w25q80bv_wait_while_busy();
+
+ gpio_clear(PORT_SSP0_SSEL, PIN_SSP0_SSEL);
+ ssp_transfer(SSP0_NUM, W25Q80BV_FAST_READ);
+ ssp_transfer(SSP0_NUM, (addr >> 16) & 0xFF);
+ ssp_transfer(SSP0_NUM, (addr >> 8) & 0xFF);
+ ssp_transfer(SSP0_NUM, (addr >> 0) & 0xFF);
+ ssp_transfer(SSP0_NUM, 0xFF);
+ for (i = 0; i < len; i++)
+ data[i] = ssp_transfer(SSP0_NUM, 0xFF);
+ gpio_set(PORT_SSP0_SSEL, PIN_SSP0_SSEL);
+}
|