Device to measure angle and get IMU measurements.

Dependencies:   mbed commands BLE_API nRF51822

Committer:
dkester
Date:
Thu Jun 11 20:59:22 2015 +0000
Revision:
8:c6345e8d607c
Parent:
6:75263c93daf7
working without Iic

Who changed what in which revision?

UserRevisionLine numberNew contents of line
dkester 0:1c5088dae6e1 1 #include "Storage.h"
dkester 0:1c5088dae6e1 2
dkester 0:1c5088dae6e1 3 SPI spi(p20, p22, p25); // mosi, miso, sclk
dkester 6:75263c93daf7 4 DigitalOut cs(p14); //Chip select
dkester 0:1c5088dae6e1 5
dkester 0:1c5088dae6e1 6 Storage::Storage()
dkester 0:1c5088dae6e1 7 {
dkester 0:1c5088dae6e1 8 cs = 1;
dkester 5:46947b447701 9 spi.format(8,3);
dkester 6:75263c93daf7 10 spi.frequency(200000);
dkester 0:1c5088dae6e1 11 }
dkester 0:1c5088dae6e1 12
dkester 4:2a5a08b14539 13 void Storage::setup()
dkester 4:2a5a08b14539 14 {
dkester 4:2a5a08b14539 15 }
dkester 4:2a5a08b14539 16
dkester 4:2a5a08b14539 17 void Storage::endAction()
dkester 4:2a5a08b14539 18 {
dkester 3:a3e1a06c486d 19 cs = 1;
dkester 4:2a5a08b14539 20 }
dkester 4:2a5a08b14539 21
dkester 4:2a5a08b14539 22 void Storage::setWRDI()
dkester 4:2a5a08b14539 23 {
dkester 4:2a5a08b14539 24 cs = 0;
dkester 4:2a5a08b14539 25 spi.write(0x04);
dkester 4:2a5a08b14539 26 cs = 1;
dkester 4:2a5a08b14539 27 }
dkester 4:2a5a08b14539 28
dkester 4:2a5a08b14539 29 void Storage::setWREN()
dkester 4:2a5a08b14539 30 {
dkester 3:a3e1a06c486d 31 cs = 0;
dkester 3:a3e1a06c486d 32 spi.write(0x06);
dkester 3:a3e1a06c486d 33 cs = 1;
dkester 4:2a5a08b14539 34 }
dkester 4:2a5a08b14539 35
dkester 4:2a5a08b14539 36 //for debug
dkester 4:2a5a08b14539 37 int8_t Storage::getSR1()
dkester 4:2a5a08b14539 38 {
dkester 1:b44bd62c542f 39 cs = 0;
dkester 3:a3e1a06c486d 40 spi.write(0x05);
dkester 4:2a5a08b14539 41 int8_t status = spi.write(0x00);
dkester 4:2a5a08b14539 42 cs = 1;
dkester 4:2a5a08b14539 43 return status;
dkester 4:2a5a08b14539 44 }
dkester 4:2a5a08b14539 45
dkester 4:2a5a08b14539 46 void Storage::clearSR(){
dkester 4:2a5a08b14539 47 cs = 0;
dkester 4:2a5a08b14539 48 spi.write(0x30);
dkester 4:2a5a08b14539 49 cs = 1;
dkester 4:2a5a08b14539 50 }
dkester 4:2a5a08b14539 51
dkester 4:2a5a08b14539 52 bool Storage::isBusy()
dkester 4:2a5a08b14539 53 {
dkester 4:2a5a08b14539 54 cs = 0;
dkester 4:2a5a08b14539 55 spi.write(0x05);
dkester 4:2a5a08b14539 56
dkester 4:2a5a08b14539 57 if(spi.write(0x00) & 0x1) {
dkester 4:2a5a08b14539 58 cs = 1;
dkester 3:a3e1a06c486d 59 return true;
dkester 3:a3e1a06c486d 60 } else {
dkester 4:2a5a08b14539 61 cs = 1;
dkester 4:2a5a08b14539 62 return false;
dkester 3:a3e1a06c486d 63 }
dkester 3:a3e1a06c486d 64 }
dkester 3:a3e1a06c486d 65
dkester 4:2a5a08b14539 66 void Storage::pageProgram(int32_t addr)
dkester 4:2a5a08b14539 67 {
dkester 4:2a5a08b14539 68 setWREN();
dkester 3:a3e1a06c486d 69 cs = 0;
dkester 4:2a5a08b14539 70 spi.write(0x12);
dkester 4:2a5a08b14539 71
dkester 4:2a5a08b14539 72 char bytes[4];
dkester 4:2a5a08b14539 73 bytes[0] = (addr >> 24) & 0xff;
dkester 4:2a5a08b14539 74 bytes[1] = (addr >> 16) & 0xff;
dkester 4:2a5a08b14539 75 bytes[2] = (addr >> 8) & 0xff;
dkester 4:2a5a08b14539 76 bytes[3] = addr & 0xff;
dkester 4:2a5a08b14539 77
dkester 4:2a5a08b14539 78 spi.write(bytes[0]);
dkester 4:2a5a08b14539 79 spi.write(bytes[1]);
dkester 4:2a5a08b14539 80 spi.write(bytes[2]);
dkester 4:2a5a08b14539 81 spi.write(bytes[3]);
dkester 4:2a5a08b14539 82 /*
dkester 4:2a5a08b14539 83 for(int i = 3; i >= 0; i--){
dkester 4:2a5a08b14539 84 spi.write((addr >> (8*i)) & 0xff);
dkester 3:a3e1a06c486d 85 }
dkester 4:2a5a08b14539 86 */
dkester 3:a3e1a06c486d 87 }
dkester 4:2a5a08b14539 88
dkester 4:2a5a08b14539 89 void Storage::writeData(int8_t data)
dkester 4:2a5a08b14539 90 {
dkester 3:a3e1a06c486d 91 spi.write(data);
dkester 4:2a5a08b14539 92 }
dkester 4:2a5a08b14539 93
dkester 4:2a5a08b14539 94 void Storage::read(int32_t addr)
dkester 4:2a5a08b14539 95 {
dkester 3:a3e1a06c486d 96 cs = 0;
dkester 4:2a5a08b14539 97
dkester 3:a3e1a06c486d 98 spi.write(0x13);
dkester 4:2a5a08b14539 99
dkester 4:2a5a08b14539 100 char bytes[4];
dkester 4:2a5a08b14539 101 bytes[0] = (addr >> 24) & 0xff;
dkester 4:2a5a08b14539 102 bytes[1] = (addr >> 16) & 0xff;
dkester 4:2a5a08b14539 103 bytes[2] = (addr >> 8) & 0xff;
dkester 4:2a5a08b14539 104 bytes[3] = addr & 0xff;
dkester 4:2a5a08b14539 105
dkester 4:2a5a08b14539 106
dkester 4:2a5a08b14539 107 spi.write(bytes[0]);
dkester 4:2a5a08b14539 108 spi.write(bytes[1]);
dkester 4:2a5a08b14539 109 spi.write(bytes[2]);
dkester 4:2a5a08b14539 110 spi.write(bytes[3]);
dkester 4:2a5a08b14539 111
dkester 4:2a5a08b14539 112
dkester 4:2a5a08b14539 113 //for(int i = 3; i >= 0; i--){
dkester 4:2a5a08b14539 114 // spi.write((addr >> (8*i)) & 0xff);
dkester 4:2a5a08b14539 115 //}
dkester 4:2a5a08b14539 116 }
dkester 4:2a5a08b14539 117
dkester 4:2a5a08b14539 118 int8_t Storage::readData()
dkester 4:2a5a08b14539 119 {
dkester 4:2a5a08b14539 120 return spi.write(0x00);
dkester 4:2a5a08b14539 121 }
dkester 4:2a5a08b14539 122
dkester 4:2a5a08b14539 123 void Storage::bulkErase()
dkester 4:2a5a08b14539 124 {
dkester 4:2a5a08b14539 125 cs = 0;
dkester 4:2a5a08b14539 126 spi.write(0x60);
dkester 4:2a5a08b14539 127 wait(0.001);
dkester 4:2a5a08b14539 128 cs = 1;
dkester 4:2a5a08b14539 129 }
dkester 4:2a5a08b14539 130
dkester 4:2a5a08b14539 131 void Storage::reset()
dkester 4:2a5a08b14539 132 {
dkester 4:2a5a08b14539 133 cs = 0;
dkester 4:2a5a08b14539 134 spi.write(0xF0);
dkester 4:2a5a08b14539 135 cs = 1;
dkester 4:2a5a08b14539 136 }
dkester 4:2a5a08b14539 137
dkester 4:2a5a08b14539 138 void Storage::sectorErase(int32_t addr)
dkester 4:2a5a08b14539 139 {
dkester 4:2a5a08b14539 140 setWREN();
dkester 4:2a5a08b14539 141 cs = 0;
dkester 4:2a5a08b14539 142 spi.write(0xDC);
dkester 4:2a5a08b14539 143
dkester 5:46947b447701 144 char bytes[4] = {0,0,0,0};
dkester 4:2a5a08b14539 145 bytes[0] = (addr >> 24) & 0xff;
dkester 4:2a5a08b14539 146 bytes[1] = (addr >> 16) & 0xff;
dkester 4:2a5a08b14539 147 bytes[2] = (addr >> 8) & 0xff;
dkester 4:2a5a08b14539 148 bytes[3] = addr & 0xff;
dkester 4:2a5a08b14539 149
dkester 4:2a5a08b14539 150 spi.write(bytes[0]);
dkester 4:2a5a08b14539 151 spi.write(bytes[1]);
dkester 4:2a5a08b14539 152 spi.write(bytes[2]);
dkester 4:2a5a08b14539 153 spi.write(bytes[3]);
dkester 0:1c5088dae6e1 154
dkester 4:2a5a08b14539 155 cs = 1;
dkester 4:2a5a08b14539 156 }