SPI Flash AT45DBXXXD

Fork of at45db161d by Suga koubou

Revision:
4:943690efda8b
Parent:
3:82157896d90d
Child:
5:ef7247c6f073
--- a/at45db161d.cpp	Thu Mar 05 18:07:15 2015 +0800
+++ b/at45db161d.cpp	Fri Mar 06 09:03:45 2015 +0800
@@ -152,7 +152,8 @@
     if (!low) { spi_transfer(0x00); }
 }
 
-void ATD45DB161D::read(int addr, char *buf, int len) {
+void ATD45DB161D::read(uint16_t addr, void *ptr, uint16_t len) {
+    uint8_t *buf = reinterpret_cast<uint8_t*>(ptr);
     int i;
     PageToBuffer(addr / _bytes, 1);
     BufferRead(1, addr % _bytes, 1);
@@ -161,13 +162,16 @@
     }
 }
 
-void ATD45DB161D::write(int addr, char *buf, int len) {
+void ATD45DB161D::write(uint16_t addr, void *ptr, uint16_t len) {
+    uint8_t *buf = reinterpret_cast<uint8_t*>(ptr);
     uint16_t i;
     while (len > 0) {
         BufferWrite(2, addr % _bytes);
-        for (i = 0; i < _bytes && len-- > 0; i++) {
+        uint16_t wlen = (_bytes < len ? _bytes : len);
+        for (i = 0; i < wlen; i++) {
             _spi.write(*buf++);
         }
+        len -= wlen;
         BufferToPage(2, addr / _bytes, 1);
         addr += _bytes;
     }