Initial commit

Dependencies:   FastPWM

Committer:
lypinator
Date:
Wed Sep 16 01:11:49 2020 +0000
Revision:
0:bb348c97df44
Added PWM

Who changed what in which revision?

UserRevisionLine numberNew contents of line
lypinator 0:bb348c97df44 1 #include "MemoryController.h"
lypinator 0:bb348c97df44 2
lypinator 0:bb348c97df44 3
lypinator 0:bb348c97df44 4
lypinator 0:bb348c97df44 5
lypinator 0:bb348c97df44 6
lypinator 0:bb348c97df44 7 //Notes : May have to add pull-up resistor to busy line (see page 25 of data sheet)
lypinator 0:bb348c97df44 8 // Must initialize device by sending reset command at power-on (page 36)
lypinator 0:bb348c97df44 9 // Chip uses 3.3V logic :( sad face
lypinator 0:bb348c97df44 10 // Collumn Address can be sent up to 4320 (0x10E0) to be valid.
lypinator 0:bb348c97df44 11 // Pages are programmed at a time (4320 Bytes per page)
lypinator 0:bb348c97df44 12 // Blocks are erased at a time (128 Pages each, 1024 Blocks in total)
lypinator 0:bb348c97df44 13
lypinator 0:bb348c97df44 14
lypinator 0:bb348c97df44 15
lypinator 0:bb348c97df44 16
lypinator 0:bb348c97df44 17
lypinator 0:bb348c97df44 18
lypinator 0:bb348c97df44 19
lypinator 0:bb348c97df44 20 //******************************************************************************
lypinator 0:bb348c97df44 21 MemoryController::MemoryController(DigitalOut CE,DigitalOut CLE,DigitalOut ALE,DigitalOut WE,DigitalOut RE,DigitalOut WP,PinName *DQ, DigitalIn RDY):
lypinator 0:bb348c97df44 22 m_CE(CE), m_CLE(CLE), m_ALE(ALE), m_WE(WE), m_RE(RE), m_WP(WP), m_DQ(DQ), m_RDY(RDY)
lypinator 0:bb348c97df44 23 {
lypinator 0:bb348c97df44 24 }
lypinator 0:bb348c97df44 25
lypinator 0:bb348c97df44 26
lypinator 0:bb348c97df44 27 //******************************************************************************
lypinator 0:bb348c97df44 28 MemoryController::~MemoryController(void)
lypinator 0:bb348c97df44 29 {
lypinator 0:bb348c97df44 30 //empty block
lypinator 0:bb348c97df44 31 }
lypinator 0:bb348c97df44 32
lypinator 0:bb348c97df44 33 void MemoryController::setDQ(const char set, bool *values){
lypinator 0:bb348c97df44 34 for (int i = 0;i<8;i++){
lypinator 0:bb348c97df44 35 values[i] = ((set >> i) & 1);
lypinator 0:bb348c97df44 36 }
lypinator 0:bb348c97df44 37 }
lypinator 0:bb348c97df44 38
lypinator 0:bb348c97df44 39 void MemoryController::ResetDevice(){
lypinator 0:bb348c97df44 40 //CMD 0xFF, wait
lypinator 0:bb348c97df44 41
lypinator 0:bb348c97df44 42 bool DQOut[8];
lypinator 0:bb348c97df44 43 m_WE =1;
lypinator 0:bb348c97df44 44 m_CE = 0;
lypinator 0:bb348c97df44 45 m_WP =1;
lypinator 0:bb348c97df44 46 m_CLE = 0;
lypinator 0:bb348c97df44 47 m_RE = 1;
lypinator 0:bb348c97df44 48 setDQ(MemoryController::RESET, DQOut);
lypinator 0:bb348c97df44 49 for(int i = 0;i<8;i++){
lypinator 0:bb348c97df44 50 printf("%i\r\n",DQOut[i]);
lypinator 0:bb348c97df44 51 }
lypinator 0:bb348c97df44 52 //Set DQs
lypinator 0:bb348c97df44 53 DigitalOut dq1(m_DQ[0],DQOut[0]);
lypinator 0:bb348c97df44 54 DigitalOut dq2(m_DQ[1],DQOut[1]);
lypinator 0:bb348c97df44 55 DigitalOut dq3(m_DQ[2],DQOut[2]);
lypinator 0:bb348c97df44 56 DigitalOut dq4(m_DQ[3],DQOut[3]);
lypinator 0:bb348c97df44 57 DigitalOut dq5(m_DQ[4],DQOut[4]);
lypinator 0:bb348c97df44 58 DigitalOut dq6(m_DQ[5],DQOut[5]);
lypinator 0:bb348c97df44 59 DigitalOut dq7(m_DQ[6],DQOut[6]);
lypinator 0:bb348c97df44 60 DigitalOut dq8(m_DQ[7],DQOut[7]);
lypinator 0:bb348c97df44 61 wait(1);
lypinator 0:bb348c97df44 62 m_CLE =1;
lypinator 0:bb348c97df44 63 m_WE = 0;
lypinator 0:bb348c97df44 64 wait_ms(1);
lypinator 0:bb348c97df44 65 m_WE =1;
lypinator 0:bb348c97df44 66 wait_us(5);
lypinator 0:bb348c97df44 67 //m_CLE = 0;
lypinator 0:bb348c97df44 68 /*m_WE = 0;
lypinator 0:bb348c97df44 69 wait_us(1);
lypinator 0:bb348c97df44 70 m_WE = 1;
lypinator 0:bb348c97df44 71 wait_us(10);
lypinator 0:bb348c97df44 72 m_CLE = 0;
lypinator 0:bb348c97df44 73 m_CE = 1;*/
lypinator 0:bb348c97df44 74 //while(m_RDY ==1);
lypinator 0:bb348c97df44 75 while(m_RDY != 1){
lypinator 0:bb348c97df44 76 printf("Writing\r\n");
lypinator 0:bb348c97df44 77 }
lypinator 0:bb348c97df44 78 //setLogicStandby();
lypinator 0:bb348c97df44 79 printf("System Reset -- Ready to rock and roll\r\n");
lypinator 0:bb348c97df44 80 }
lypinator 0:bb348c97df44 81
lypinator 0:bb348c97df44 82 void MemoryController::ReadPage(DataAddress &address, char *DataOut){
lypinator 0:bb348c97df44 83 //Start CMD 00, AADR c1, ADDR c2, ADDR r1, ADDR r2, ADDR r3, CMD 0x30, wait for rdy=1, data out
lypinator 0:bb348c97df44 84 while (m_RDY == 0); //Bus is Busy, do not write yet
lypinator 0:bb348c97df44 85 startPageRead(address);
lypinator 0:bb348c97df44 86 //WriteAddressPage(address);
lypinator 0:bb348c97df44 87 //endPageRead();
lypinator 0:bb348c97df44 88 ReadData(DataOut);
lypinator 0:bb348c97df44 89 setLogicStandby();
lypinator 0:bb348c97df44 90 printf("Page Read Complete\r\n");
lypinator 0:bb348c97df44 91 }
lypinator 0:bb348c97df44 92
lypinator 0:bb348c97df44 93 void MemoryController::sendPageData(char *DataIn){
lypinator 0:bb348c97df44 94 setLogicDataOut();
lypinator 0:bb348c97df44 95 DigitalOut dq1(m_DQ[0],0);
lypinator 0:bb348c97df44 96 DigitalOut dq2(m_DQ[1],0);
lypinator 0:bb348c97df44 97 DigitalOut dq3(m_DQ[2],0);
lypinator 0:bb348c97df44 98 DigitalOut dq4(m_DQ[3],0);
lypinator 0:bb348c97df44 99 DigitalOut dq5(m_DQ[4],0);
lypinator 0:bb348c97df44 100 DigitalOut dq6(m_DQ[5],0);
lypinator 0:bb348c97df44 101 DigitalOut dq7(m_DQ[6],0);
lypinator 0:bb348c97df44 102 DigitalOut dq8(m_DQ[7],0);
lypinator 0:bb348c97df44 103 wait_us(1);
lypinator 0:bb348c97df44 104 int time =1;
lypinator 0:bb348c97df44 105 Timer timer1;
lypinator 0:bb348c97df44 106 timer1.start();
lypinator 0:bb348c97df44 107 while(m_RDY == 0);
lypinator 0:bb348c97df44 108 for (int i=0;i < 4320;i++){
lypinator 0:bb348c97df44 109 bool DQOut[8];
lypinator 0:bb348c97df44 110 setDQ(DataIn[i], DQOut);
lypinator 0:bb348c97df44 111 dq1=DQOut[0];
lypinator 0:bb348c97df44 112 dq2=DQOut[1];
lypinator 0:bb348c97df44 113 dq3=DQOut[2];
lypinator 0:bb348c97df44 114 dq4=DQOut[3];
lypinator 0:bb348c97df44 115 dq5=DQOut[4];
lypinator 0:bb348c97df44 116 dq6=DQOut[5];
lypinator 0:bb348c97df44 117 dq7=DQOut[6];
lypinator 0:bb348c97df44 118 dq8=DQOut[7];
lypinator 0:bb348c97df44 119 m_WE = 0;
lypinator 0:bb348c97df44 120 while(timer1.read_us() < time);
lypinator 0:bb348c97df44 121 m_WE = 1;
lypinator 0:bb348c97df44 122 time++;
lypinator 0:bb348c97df44 123 while(timer1.read_us() < time);
lypinator 0:bb348c97df44 124 time++;
lypinator 0:bb348c97df44 125 }
lypinator 0:bb348c97df44 126 }
lypinator 0:bb348c97df44 127
lypinator 0:bb348c97df44 128 void MemoryController::ReadData(char *DataOut){
lypinator 0:bb348c97df44 129 setLogicDataOut();
lypinator 0:bb348c97df44 130 DigitalIn dq1(m_DQ[0]);
lypinator 0:bb348c97df44 131 DigitalIn dq2(m_DQ[1]);
lypinator 0:bb348c97df44 132 DigitalIn dq3(m_DQ[2]);
lypinator 0:bb348c97df44 133 DigitalIn dq4(m_DQ[3]);
lypinator 0:bb348c97df44 134 DigitalIn dq5(m_DQ[4]);
lypinator 0:bb348c97df44 135 DigitalIn dq6(m_DQ[5]);
lypinator 0:bb348c97df44 136 DigitalIn dq7(m_DQ[6]);
lypinator 0:bb348c97df44 137 DigitalIn dq8(m_DQ[7]);
lypinator 0:bb348c97df44 138 Data dataOut;
lypinator 0:bb348c97df44 139 wait_us(1);
lypinator 0:bb348c97df44 140 while(m_RDY == 0);
lypinator 0:bb348c97df44 141 m_RE = 0;
lypinator 0:bb348c97df44 142 wait_us(1);
lypinator 0:bb348c97df44 143 int time =1;
lypinator 0:bb348c97df44 144 Timer timer1;
lypinator 0:bb348c97df44 145 timer1.start();
lypinator 0:bb348c97df44 146 for (int i=0;i < 4320;i++){
lypinator 0:bb348c97df44 147 m_RE = 1;
lypinator 0:bb348c97df44 148 dataOut.bits.dq1 = dq1;
lypinator 0:bb348c97df44 149 dataOut.bits.dq2 = dq2;
lypinator 0:bb348c97df44 150 dataOut.bits.dq3 = dq3;
lypinator 0:bb348c97df44 151 dataOut.bits.dq4 = dq4;
lypinator 0:bb348c97df44 152 dataOut.bits.dq5 = dq5;
lypinator 0:bb348c97df44 153 dataOut.bits.dq6 = dq6;
lypinator 0:bb348c97df44 154 dataOut.bits.dq7 = dq7;
lypinator 0:bb348c97df44 155 dataOut.bits.dq8 = dq8;
lypinator 0:bb348c97df44 156 DataOut[i] = dataOut.all;
lypinator 0:bb348c97df44 157 while(timer1.read_us()<time);
lypinator 0:bb348c97df44 158 m_RE = 0;
lypinator 0:bb348c97df44 159 time++;
lypinator 0:bb348c97df44 160 while(timer1.read_us() <time);
lypinator 0:bb348c97df44 161 time++;
lypinator 0:bb348c97df44 162 }
lypinator 0:bb348c97df44 163 }
lypinator 0:bb348c97df44 164
lypinator 0:bb348c97df44 165 void MemoryController::startPageRead(DataAddress &address){
lypinator 0:bb348c97df44 166 bool DQOut[8];
lypinator 0:bb348c97df44 167 Timer timer1;
lypinator 0:bb348c97df44 168 timer1.start();
lypinator 0:bb348c97df44 169 setDQ(MemoryController::READADDRINIT, DQOut);
lypinator 0:bb348c97df44 170 setLogicCommandInput();
lypinator 0:bb348c97df44 171 m_WE =1;
lypinator 0:bb348c97df44 172 while (timer1.read_us() < 1);
lypinator 0:bb348c97df44 173 //Set DQs
lypinator 0:bb348c97df44 174 DigitalOut dq1(m_DQ[0],DQOut[0]);
lypinator 0:bb348c97df44 175 DigitalOut dq2(m_DQ[1],DQOut[1]);
lypinator 0:bb348c97df44 176 DigitalOut dq3(m_DQ[2],DQOut[2]);
lypinator 0:bb348c97df44 177 DigitalOut dq4(m_DQ[3],DQOut[3]);
lypinator 0:bb348c97df44 178 DigitalOut dq5(m_DQ[4],DQOut[4]);
lypinator 0:bb348c97df44 179 DigitalOut dq6(m_DQ[5],DQOut[5]);
lypinator 0:bb348c97df44 180 DigitalOut dq7(m_DQ[6],DQOut[6]);
lypinator 0:bb348c97df44 181 DigitalOut dq8(m_DQ[7],0);
lypinator 0:bb348c97df44 182 m_WE = 0;
lypinator 0:bb348c97df44 183 while (timer1.read_us() < 2);
lypinator 0:bb348c97df44 184 wait_us(30);
lypinator 0:bb348c97df44 185 m_WE = 1;
lypinator 0:bb348c97df44 186 while(timer1.read_us() < 3);
lypinator 0:bb348c97df44 187 m_WE=0;
lypinator 0:bb348c97df44 188 setLogicAddressInput();
lypinator 0:bb348c97df44 189 //collumn 1
lypinator 0:bb348c97df44 190 setDQ(address.col1, DQOut);
lypinator 0:bb348c97df44 191 dq1 = DQOut[0];
lypinator 0:bb348c97df44 192 dq2 = DQOut[1];
lypinator 0:bb348c97df44 193 dq3 = DQOut[2];
lypinator 0:bb348c97df44 194 dq4 = DQOut[3];
lypinator 0:bb348c97df44 195 dq5 = DQOut[4];
lypinator 0:bb348c97df44 196 dq6 = DQOut[5];
lypinator 0:bb348c97df44 197 dq7 = DQOut[6];
lypinator 0:bb348c97df44 198 dq8 = DQOut[7];
lypinator 0:bb348c97df44 199 while(timer1.read_us() < 5);
lypinator 0:bb348c97df44 200 m_WE = 1;
lypinator 0:bb348c97df44 201 while(timer1.read_us() < 6);
lypinator 0:bb348c97df44 202 m_WE = 0;
lypinator 0:bb348c97df44 203
lypinator 0:bb348c97df44 204 //collumn 2
lypinator 0:bb348c97df44 205 setDQ(address.col2, DQOut);
lypinator 0:bb348c97df44 206 dq1 = DQOut[0];
lypinator 0:bb348c97df44 207 dq2 = DQOut[1];
lypinator 0:bb348c97df44 208 dq3 = DQOut[2];
lypinator 0:bb348c97df44 209 dq4 = DQOut[3];
lypinator 0:bb348c97df44 210 dq5 = DQOut[4];
lypinator 0:bb348c97df44 211 dq6 = DQOut[5];
lypinator 0:bb348c97df44 212 dq7 = DQOut[6];
lypinator 0:bb348c97df44 213 dq8 = DQOut[7];
lypinator 0:bb348c97df44 214 while(timer1.read_us() < 7);
lypinator 0:bb348c97df44 215 m_WE = 1;
lypinator 0:bb348c97df44 216 while(timer1.read_us() < 8);
lypinator 0:bb348c97df44 217 m_WE =0;
lypinator 0:bb348c97df44 218
lypinator 0:bb348c97df44 219 //page
lypinator 0:bb348c97df44 220 setDQ(address.page, DQOut);
lypinator 0:bb348c97df44 221 dq1 = DQOut[0];
lypinator 0:bb348c97df44 222 dq2 = DQOut[1];
lypinator 0:bb348c97df44 223 dq3 = DQOut[2];
lypinator 0:bb348c97df44 224 dq4 = DQOut[3];
lypinator 0:bb348c97df44 225 dq5 = DQOut[4];
lypinator 0:bb348c97df44 226 dq6 = DQOut[5];
lypinator 0:bb348c97df44 227 dq7 = DQOut[6];
lypinator 0:bb348c97df44 228 dq8 = DQOut[7];
lypinator 0:bb348c97df44 229 while(timer1.read_us() < 9);
lypinator 0:bb348c97df44 230 m_WE = 1;
lypinator 0:bb348c97df44 231 while(timer1.read_us() < 10);
lypinator 0:bb348c97df44 232 m_WE = 0;
lypinator 0:bb348c97df44 233
lypinator 0:bb348c97df44 234 //Block1
lypinator 0:bb348c97df44 235 setDQ(address.block1, DQOut);
lypinator 0:bb348c97df44 236 dq1 = DQOut[0];
lypinator 0:bb348c97df44 237 dq2 = DQOut[1];
lypinator 0:bb348c97df44 238 dq3 = DQOut[2];
lypinator 0:bb348c97df44 239 dq4 = DQOut[3];
lypinator 0:bb348c97df44 240 dq5 = DQOut[4];
lypinator 0:bb348c97df44 241 dq6 = DQOut[5];
lypinator 0:bb348c97df44 242 dq7 = DQOut[6];
lypinator 0:bb348c97df44 243 dq8 = DQOut[7];
lypinator 0:bb348c97df44 244 while(timer1.read_us() < 11);
lypinator 0:bb348c97df44 245 m_WE = 1;
lypinator 0:bb348c97df44 246 while(timer1.read_us() < 12);
lypinator 0:bb348c97df44 247 m_WE = 0;
lypinator 0:bb348c97df44 248
lypinator 0:bb348c97df44 249 //Block2
lypinator 0:bb348c97df44 250 setDQ(address.block2, DQOut);
lypinator 0:bb348c97df44 251 dq1 = DQOut[0];
lypinator 0:bb348c97df44 252 dq2 = DQOut[1];
lypinator 0:bb348c97df44 253 dq3 = DQOut[2];
lypinator 0:bb348c97df44 254 dq4 = DQOut[3];
lypinator 0:bb348c97df44 255 dq5 = DQOut[4];
lypinator 0:bb348c97df44 256 dq6 = DQOut[5];
lypinator 0:bb348c97df44 257 dq7 = DQOut[6];
lypinator 0:bb348c97df44 258 dq8 = DQOut[7];
lypinator 0:bb348c97df44 259 while(timer1.read_us() < 13);
lypinator 0:bb348c97df44 260 m_WE = 1;
lypinator 0:bb348c97df44 261 while(timer1.read_us() < 14);
lypinator 0:bb348c97df44 262 m_ALE = 0;
lypinator 0:bb348c97df44 263 wait_us(1);
lypinator 0:bb348c97df44 264 m_WE = 0;
lypinator 0:bb348c97df44 265 wait_us(1);
lypinator 0:bb348c97df44 266 //setLogicCommandInput();
lypinator 0:bb348c97df44 267 setDQ(MemoryController::READADDREND, DQOut);
lypinator 0:bb348c97df44 268 //Set DQs
lypinator 0:bb348c97df44 269 dq1 = DQOut[0];
lypinator 0:bb348c97df44 270 dq2 = DQOut[1];
lypinator 0:bb348c97df44 271 dq3 = DQOut[2];
lypinator 0:bb348c97df44 272 dq4 = DQOut[3];
lypinator 0:bb348c97df44 273 dq5 = DQOut[4];
lypinator 0:bb348c97df44 274 dq6 = DQOut[5];
lypinator 0:bb348c97df44 275 dq7 = DQOut[6];
lypinator 0:bb348c97df44 276 dq8 = DQOut[7];
lypinator 0:bb348c97df44 277 m_CLE = 1;
lypinator 0:bb348c97df44 278 wait_us(30);
lypinator 0:bb348c97df44 279 m_WE = 1;
lypinator 0:bb348c97df44 280 wait_us(10);
lypinator 0:bb348c97df44 281 //while(timer1.read_us() < 17);
lypinator 0:bb348c97df44 282 }
lypinator 0:bb348c97df44 283
lypinator 0:bb348c97df44 284 void MemoryController::startPageWrite(DataAddress &address){
lypinator 0:bb348c97df44 285 bool DQOut[8];
lypinator 0:bb348c97df44 286 Timer timer1;
lypinator 0:bb348c97df44 287 timer1.start();
lypinator 0:bb348c97df44 288 setDQ(MemoryController::WRITEPAGEINIT, DQOut);
lypinator 0:bb348c97df44 289 setLogicCommandInput();
lypinator 0:bb348c97df44 290 m_WE =1;
lypinator 0:bb348c97df44 291 while (timer1.read_us() < 1);
lypinator 0:bb348c97df44 292 //Set DQs
lypinator 0:bb348c97df44 293 DigitalOut dq1(m_DQ[0],DQOut[0]);
lypinator 0:bb348c97df44 294 DigitalOut dq2(m_DQ[1],DQOut[1]);
lypinator 0:bb348c97df44 295 DigitalOut dq3(m_DQ[2],DQOut[2]);
lypinator 0:bb348c97df44 296 DigitalOut dq4(m_DQ[3],DQOut[3]);
lypinator 0:bb348c97df44 297 DigitalOut dq5(m_DQ[4],DQOut[4]);
lypinator 0:bb348c97df44 298 DigitalOut dq6(m_DQ[5],DQOut[5]);
lypinator 0:bb348c97df44 299 DigitalOut dq7(m_DQ[6],DQOut[6]);
lypinator 0:bb348c97df44 300 DigitalOut dq8(m_DQ[7],DQOut[7]);
lypinator 0:bb348c97df44 301 m_WE = 0;
lypinator 0:bb348c97df44 302 while (timer1.read_us() < 2);
lypinator 0:bb348c97df44 303 m_WE = 1;
lypinator 0:bb348c97df44 304 while(timer1.read_us() < 3);
lypinator 0:bb348c97df44 305 setLogicAddressInput();
lypinator 0:bb348c97df44 306 m_WE=0;
lypinator 0:bb348c97df44 307 //collumn 1
lypinator 0:bb348c97df44 308 setDQ(address.col1, DQOut);
lypinator 0:bb348c97df44 309 dq1 = DQOut[0];
lypinator 0:bb348c97df44 310 dq2 = DQOut[1];
lypinator 0:bb348c97df44 311 dq3 = DQOut[2];
lypinator 0:bb348c97df44 312 dq4 = DQOut[3];
lypinator 0:bb348c97df44 313 dq5 = DQOut[4];
lypinator 0:bb348c97df44 314 dq6 = DQOut[5];
lypinator 0:bb348c97df44 315 dq7 = DQOut[6];
lypinator 0:bb348c97df44 316 dq8 = DQOut[7];
lypinator 0:bb348c97df44 317 while(timer1.read_us() < 5);
lypinator 0:bb348c97df44 318 m_WE = 1;
lypinator 0:bb348c97df44 319 while(timer1.read_us() < 6);
lypinator 0:bb348c97df44 320 m_WE = 0;
lypinator 0:bb348c97df44 321
lypinator 0:bb348c97df44 322 //collumn 2
lypinator 0:bb348c97df44 323 setDQ(address.col2, DQOut);
lypinator 0:bb348c97df44 324 dq1 = DQOut[0];
lypinator 0:bb348c97df44 325 dq2 = DQOut[1];
lypinator 0:bb348c97df44 326 dq3 = DQOut[2];
lypinator 0:bb348c97df44 327 dq4 = DQOut[3];
lypinator 0:bb348c97df44 328 dq5 = DQOut[4];
lypinator 0:bb348c97df44 329 dq6 = DQOut[5];
lypinator 0:bb348c97df44 330 dq7 = DQOut[6];
lypinator 0:bb348c97df44 331 dq8 = DQOut[7];
lypinator 0:bb348c97df44 332 while(timer1.read_us() < 7);
lypinator 0:bb348c97df44 333 m_WE = 1;
lypinator 0:bb348c97df44 334 while(timer1.read_us() < 8);
lypinator 0:bb348c97df44 335 m_WE =0;
lypinator 0:bb348c97df44 336
lypinator 0:bb348c97df44 337 //page
lypinator 0:bb348c97df44 338 setDQ(address.page, DQOut);
lypinator 0:bb348c97df44 339 dq1 = DQOut[0];
lypinator 0:bb348c97df44 340 dq2 = DQOut[1];
lypinator 0:bb348c97df44 341 dq3 = DQOut[2];
lypinator 0:bb348c97df44 342 dq4 = DQOut[3];
lypinator 0:bb348c97df44 343 dq5 = DQOut[4];
lypinator 0:bb348c97df44 344 dq6 = DQOut[5];
lypinator 0:bb348c97df44 345 dq7 = DQOut[6];
lypinator 0:bb348c97df44 346 dq8 = DQOut[7];
lypinator 0:bb348c97df44 347 while(timer1.read_us() < 9);
lypinator 0:bb348c97df44 348 m_WE = 1;
lypinator 0:bb348c97df44 349 while(timer1.read_us() < 10);
lypinator 0:bb348c97df44 350 m_WE = 0;
lypinator 0:bb348c97df44 351
lypinator 0:bb348c97df44 352 //Block1
lypinator 0:bb348c97df44 353 setDQ(address.block1, DQOut);
lypinator 0:bb348c97df44 354 dq1 = DQOut[0];
lypinator 0:bb348c97df44 355 dq2 = DQOut[1];
lypinator 0:bb348c97df44 356 dq3 = DQOut[2];
lypinator 0:bb348c97df44 357 dq4 = DQOut[3];
lypinator 0:bb348c97df44 358 dq5 = DQOut[4];
lypinator 0:bb348c97df44 359 dq6 = DQOut[5];
lypinator 0:bb348c97df44 360 dq7 = DQOut[6];
lypinator 0:bb348c97df44 361 dq8 = DQOut[7];
lypinator 0:bb348c97df44 362 while(timer1.read_us() < 11);
lypinator 0:bb348c97df44 363 m_WE = 1;
lypinator 0:bb348c97df44 364 while(timer1.read_us() < 12);
lypinator 0:bb348c97df44 365 m_WE = 0;
lypinator 0:bb348c97df44 366
lypinator 0:bb348c97df44 367 //Block2
lypinator 0:bb348c97df44 368 setDQ(address.block2, DQOut);
lypinator 0:bb348c97df44 369 dq1 = DQOut[0];
lypinator 0:bb348c97df44 370 dq2 = DQOut[1];
lypinator 0:bb348c97df44 371 dq3 = DQOut[2];
lypinator 0:bb348c97df44 372 dq4 = DQOut[3];
lypinator 0:bb348c97df44 373 dq5 = DQOut[4];
lypinator 0:bb348c97df44 374 dq6 = DQOut[5];
lypinator 0:bb348c97df44 375 dq7 = DQOut[6];
lypinator 0:bb348c97df44 376 dq8 = DQOut[7];
lypinator 0:bb348c97df44 377 while(timer1.read_us() < 13);
lypinator 0:bb348c97df44 378 m_WE = 1;
lypinator 0:bb348c97df44 379 while(timer1.read_us() < 14);
lypinator 0:bb348c97df44 380 }
lypinator 0:bb348c97df44 381
lypinator 0:bb348c97df44 382 void MemoryController::endPageRead(){
lypinator 0:bb348c97df44 383 bool DQOut[8];
lypinator 0:bb348c97df44 384 Timer timer1;
lypinator 0:bb348c97df44 385 setDQ(MemoryController::READADDREND, DQOut);
lypinator 0:bb348c97df44 386 setLogicCommandInput();
lypinator 0:bb348c97df44 387 timer1.start();
lypinator 0:bb348c97df44 388 //Set DQs
lypinator 0:bb348c97df44 389 DigitalOut dq1(m_DQ[0],DQOut[0]);
lypinator 0:bb348c97df44 390 DigitalOut dq2(m_DQ[1],DQOut[1]);
lypinator 0:bb348c97df44 391 DigitalOut dq3(m_DQ[2],DQOut[2]);
lypinator 0:bb348c97df44 392 DigitalOut dq4(m_DQ[3],DQOut[3]);
lypinator 0:bb348c97df44 393 DigitalOut dq5(m_DQ[4],DQOut[4]);
lypinator 0:bb348c97df44 394 DigitalOut dq6(m_DQ[5],DQOut[5]);
lypinator 0:bb348c97df44 395 DigitalOut dq7(m_DQ[6],DQOut[6]);
lypinator 0:bb348c97df44 396 DigitalOut dq8(m_DQ[7],DQOut[7]);
lypinator 0:bb348c97df44 397 while(timer1.read_us() < 1);
lypinator 0:bb348c97df44 398 m_WE = 1;
lypinator 0:bb348c97df44 399 while(timer1.read_us() < 2);
lypinator 0:bb348c97df44 400 }
lypinator 0:bb348c97df44 401
lypinator 0:bb348c97df44 402 void MemoryController::endPageWrite(){
lypinator 0:bb348c97df44 403 bool DQOut[8];
lypinator 0:bb348c97df44 404 Timer timer1;
lypinator 0:bb348c97df44 405 setDQ(MemoryController::WRITEPAGEEND, DQOut);
lypinator 0:bb348c97df44 406 setLogicCommandInput();
lypinator 0:bb348c97df44 407 timer1.start();
lypinator 0:bb348c97df44 408 //Set DQs
lypinator 0:bb348c97df44 409 DigitalOut dq1(m_DQ[0],DQOut[0]);
lypinator 0:bb348c97df44 410 DigitalOut dq2(m_DQ[1],DQOut[1]);
lypinator 0:bb348c97df44 411 DigitalOut dq3(m_DQ[2],DQOut[2]);
lypinator 0:bb348c97df44 412 DigitalOut dq4(m_DQ[3],DQOut[3]);
lypinator 0:bb348c97df44 413 DigitalOut dq5(m_DQ[4],DQOut[4]);
lypinator 0:bb348c97df44 414 DigitalOut dq6(m_DQ[5],DQOut[5]);
lypinator 0:bb348c97df44 415 DigitalOut dq7(m_DQ[6],DQOut[6]);
lypinator 0:bb348c97df44 416 DigitalOut dq8(m_DQ[7],DQOut[7]);
lypinator 0:bb348c97df44 417 while(timer1.read_us() < 1);
lypinator 0:bb348c97df44 418 m_WE = 1;
lypinator 0:bb348c97df44 419 while(timer1.read_us() < 2);
lypinator 0:bb348c97df44 420 }
lypinator 0:bb348c97df44 421
lypinator 0:bb348c97df44 422 void MemoryController::WriteAddressBlock(DataAddress &address){
lypinator 0:bb348c97df44 423
lypinator 0:bb348c97df44 424 }
lypinator 0:bb348c97df44 425
lypinator 0:bb348c97df44 426 void MemoryController::WriteAddressPage(DataAddress &address){
lypinator 0:bb348c97df44 427 bool DQOut[8];
lypinator 0:bb348c97df44 428 Timer timer1;
lypinator 0:bb348c97df44 429 timer1.start();
lypinator 0:bb348c97df44 430
lypinator 0:bb348c97df44 431 //collumn 1
lypinator 0:bb348c97df44 432 setDQ(address.col1, DQOut);
lypinator 0:bb348c97df44 433 setLogicAddressInput();
lypinator 0:bb348c97df44 434 DigitalOut dq1(m_DQ[0],DQOut[0]);
lypinator 0:bb348c97df44 435 DigitalOut dq2(m_DQ[1],DQOut[1]);
lypinator 0:bb348c97df44 436 DigitalOut dq3(m_DQ[2],DQOut[2]);
lypinator 0:bb348c97df44 437 DigitalOut dq4(m_DQ[3],DQOut[3]);
lypinator 0:bb348c97df44 438 DigitalOut dq5(m_DQ[4],DQOut[4]);
lypinator 0:bb348c97df44 439 DigitalOut dq6(m_DQ[5],DQOut[5]);
lypinator 0:bb348c97df44 440 DigitalOut dq7(m_DQ[6],DQOut[6]);
lypinator 0:bb348c97df44 441 DigitalOut dq8(m_DQ[7],DQOut[7]);
lypinator 0:bb348c97df44 442 while(timer1.read_us() < 1);
lypinator 0:bb348c97df44 443 m_WE = 1;
lypinator 0:bb348c97df44 444 while(timer1.read_us() < 2);
lypinator 0:bb348c97df44 445 m_WE = 0;
lypinator 0:bb348c97df44 446
lypinator 0:bb348c97df44 447 //collumn 2
lypinator 0:bb348c97df44 448 setDQ(address.col2, DQOut);
lypinator 0:bb348c97df44 449 setLogicAddressInput();
lypinator 0:bb348c97df44 450 dq1 = DQOut[0];
lypinator 0:bb348c97df44 451 dq2 = DQOut[1];
lypinator 0:bb348c97df44 452 dq3 = DQOut[2];
lypinator 0:bb348c97df44 453 dq4 = DQOut[3];
lypinator 0:bb348c97df44 454 dq5 = DQOut[4];
lypinator 0:bb348c97df44 455 dq6 = DQOut[5];
lypinator 0:bb348c97df44 456 dq7 = DQOut[6];
lypinator 0:bb348c97df44 457 dq8 = DQOut[7];
lypinator 0:bb348c97df44 458 while(timer1.read_us() < 3);
lypinator 0:bb348c97df44 459 m_WE = 1;
lypinator 0:bb348c97df44 460 while(timer1.read_us() < 4);
lypinator 0:bb348c97df44 461 m_WE =0;
lypinator 0:bb348c97df44 462
lypinator 0:bb348c97df44 463 //page
lypinator 0:bb348c97df44 464 setDQ(address.page, DQOut);
lypinator 0:bb348c97df44 465 setLogicAddressInput();
lypinator 0:bb348c97df44 466 dq1 = DQOut[0];
lypinator 0:bb348c97df44 467 dq2 = DQOut[1];
lypinator 0:bb348c97df44 468 dq3 = DQOut[2];
lypinator 0:bb348c97df44 469 dq4 = DQOut[3];
lypinator 0:bb348c97df44 470 dq5 = DQOut[4];
lypinator 0:bb348c97df44 471 dq6 = DQOut[5];
lypinator 0:bb348c97df44 472 dq7 = DQOut[6];
lypinator 0:bb348c97df44 473 dq8 = DQOut[7];
lypinator 0:bb348c97df44 474 while(timer1.read_us() < 5);
lypinator 0:bb348c97df44 475 m_WE = 1;
lypinator 0:bb348c97df44 476 while(timer1.read_us() < 6);
lypinator 0:bb348c97df44 477 m_WE = 0;
lypinator 0:bb348c97df44 478
lypinator 0:bb348c97df44 479 //Block1
lypinator 0:bb348c97df44 480 setDQ(address.block1, DQOut);
lypinator 0:bb348c97df44 481 setLogicAddressInput();
lypinator 0:bb348c97df44 482 dq1 = DQOut[0];
lypinator 0:bb348c97df44 483 dq2 = DQOut[1];
lypinator 0:bb348c97df44 484 dq3 = DQOut[2];
lypinator 0:bb348c97df44 485 dq4 = DQOut[3];
lypinator 0:bb348c97df44 486 dq5 = DQOut[4];
lypinator 0:bb348c97df44 487 dq6 = DQOut[5];
lypinator 0:bb348c97df44 488 dq7 = DQOut[6];
lypinator 0:bb348c97df44 489 dq8 = DQOut[7];
lypinator 0:bb348c97df44 490 while(timer1.read_us() < 7);
lypinator 0:bb348c97df44 491 m_WE = 1;
lypinator 0:bb348c97df44 492 while(timer1.read_us() < 8);
lypinator 0:bb348c97df44 493 m_WE = 0;
lypinator 0:bb348c97df44 494
lypinator 0:bb348c97df44 495 //Block2
lypinator 0:bb348c97df44 496 setDQ(address.block2, DQOut);
lypinator 0:bb348c97df44 497 setLogicAddressInput();
lypinator 0:bb348c97df44 498 dq1 = DQOut[0];
lypinator 0:bb348c97df44 499 dq2 = DQOut[1];
lypinator 0:bb348c97df44 500 dq3 = DQOut[2];
lypinator 0:bb348c97df44 501 dq4 = DQOut[3];
lypinator 0:bb348c97df44 502 dq5 = DQOut[4];
lypinator 0:bb348c97df44 503 dq6 = DQOut[5];
lypinator 0:bb348c97df44 504 dq7 = DQOut[6];
lypinator 0:bb348c97df44 505 dq8 = DQOut[7];
lypinator 0:bb348c97df44 506 while(timer1.read_us() < 9);
lypinator 0:bb348c97df44 507 m_WE = 1;
lypinator 0:bb348c97df44 508 while(timer1.read_us() < 10);
lypinator 0:bb348c97df44 509 m_WE = 0;
lypinator 0:bb348c97df44 510
lypinator 0:bb348c97df44 511 }
lypinator 0:bb348c97df44 512
lypinator 0:bb348c97df44 513 void MemoryController::ProgramPage(DataAddress &address, char *DataIn){
lypinator 0:bb348c97df44 514 //CMD 0x80, AADR c1, ADDR c2, ADDR r1, ADDR r2, ADDR r3, Page Data, CMD 0x10
lypinator 0:bb348c97df44 515 while (m_RDY == 0);
lypinator 0:bb348c97df44 516 startPageWrite(address);
lypinator 0:bb348c97df44 517 //WriteAddressPage(address);
lypinator 0:bb348c97df44 518 sendPageData(DataIn);
lypinator 0:bb348c97df44 519 endPageWrite();
lypinator 0:bb348c97df44 520 setLogicStandby();
lypinator 0:bb348c97df44 521 printf("Page Write Complete\r\n");
lypinator 0:bb348c97df44 522
lypinator 0:bb348c97df44 523 }
lypinator 0:bb348c97df44 524
lypinator 0:bb348c97df44 525 void MemoryController::EraseBlock(DataAddress &address){
lypinator 0:bb348c97df44 526 //CMD 0x60, ADDR R1, ADDR r2, ADDR r3, CMD oxD1
lypinator 0:bb348c97df44 527 while (m_RDY == 0);
lypinator 0:bb348c97df44 528
lypinator 0:bb348c97df44 529
lypinator 0:bb348c97df44 530 }
lypinator 0:bb348c97df44 531
lypinator 0:bb348c97df44 532 void MemoryController::setLogicStandby(){
lypinator 0:bb348c97df44 533 m_CE = 1;
lypinator 0:bb348c97df44 534 m_CLE = 0;
lypinator 0:bb348c97df44 535 m_ALE = 0;
lypinator 0:bb348c97df44 536 m_WE = 0;
lypinator 0:bb348c97df44 537 m_RE = 0;
lypinator 0:bb348c97df44 538 m_WP = 0;
lypinator 0:bb348c97df44 539 }
lypinator 0:bb348c97df44 540
lypinator 0:bb348c97df44 541 void MemoryController::setLogicBusIdle(){
lypinator 0:bb348c97df44 542 m_CE = 0;
lypinator 0:bb348c97df44 543 m_CLE = 0;
lypinator 0:bb348c97df44 544 m_ALE = 0;
lypinator 0:bb348c97df44 545 m_WE = 1;
lypinator 0:bb348c97df44 546 m_RE = 1;
lypinator 0:bb348c97df44 547 m_WP = 0;
lypinator 0:bb348c97df44 548 }
lypinator 0:bb348c97df44 549
lypinator 0:bb348c97df44 550 void MemoryController::setLogicCommandInput(){
lypinator 0:bb348c97df44 551 m_CE = 0;
lypinator 0:bb348c97df44 552 m_CLE = 1;
lypinator 0:bb348c97df44 553 m_ALE = 0;
lypinator 0:bb348c97df44 554 m_WE = 0; //rising edge
lypinator 0:bb348c97df44 555 m_RE = 1;
lypinator 0:bb348c97df44 556 m_WP = 1;
lypinator 0:bb348c97df44 557 }
lypinator 0:bb348c97df44 558
lypinator 0:bb348c97df44 559 void MemoryController::setLogicAddressInput(){
lypinator 0:bb348c97df44 560 m_CE = 0;
lypinator 0:bb348c97df44 561 m_CLE = 0;
lypinator 0:bb348c97df44 562 m_ALE = 1;
lypinator 0:bb348c97df44 563 m_WE = 0; //rising edge
lypinator 0:bb348c97df44 564 m_RE = 1;
lypinator 0:bb348c97df44 565 m_WP = 1;
lypinator 0:bb348c97df44 566 }
lypinator 0:bb348c97df44 567
lypinator 0:bb348c97df44 568 void MemoryController::setLogicDataInput(){
lypinator 0:bb348c97df44 569 m_CE = 0;
lypinator 0:bb348c97df44 570 m_CLE = 0;
lypinator 0:bb348c97df44 571 m_ALE = 0;
lypinator 0:bb348c97df44 572 m_WE = 1; //rising edge
lypinator 0:bb348c97df44 573 m_RE = 1;
lypinator 0:bb348c97df44 574 m_WP = 1;
lypinator 0:bb348c97df44 575 }
lypinator 0:bb348c97df44 576
lypinator 0:bb348c97df44 577 void MemoryController::setLogicDataOut(){
lypinator 0:bb348c97df44 578 m_CE = 0;
lypinator 0:bb348c97df44 579 m_CLE = 0;
lypinator 0:bb348c97df44 580 m_ALE = 0;
lypinator 0:bb348c97df44 581 m_WE = 1;
lypinator 0:bb348c97df44 582 m_RE = 1; //falling edge
lypinator 0:bb348c97df44 583 m_WP = 0;
lypinator 0:bb348c97df44 584 }
lypinator 0:bb348c97df44 585
lypinator 0:bb348c97df44 586 void MemoryController::setLogicWriteProtect(){
lypinator 0:bb348c97df44 587 m_CE = 0;
lypinator 0:bb348c97df44 588 m_CLE = 0;
lypinator 0:bb348c97df44 589 m_ALE = 0;
lypinator 0:bb348c97df44 590 m_WE = 0;
lypinator 0:bb348c97df44 591 m_RE = 0;
lypinator 0:bb348c97df44 592 m_WP = 0;
lypinator 0:bb348c97df44 593 }