38 #define INCLUDE_FROM_DATAFLASHMANAGER_C
73 uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);
74 bool UsingSecondBuffer =
false;
77 Dataflash_SelectChipFromPage(CurrDFPage);
79 #if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE)
81 Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);
82 Dataflash_SendAddressBytes(CurrDFPage, 0);
83 Dataflash_WaitWhileBusy();
87 Dataflash_SendByte(DF_CMD_BUFF1WRITE);
88 Dataflash_SendAddressBytes(0, CurrDFPageByte);
96 uint8_t BytesInBlockDiv16 = 0;
112 if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) {
114 Dataflash_WaitWhileBusy();
115 Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE);
116 Dataflash_SendAddressBytes(CurrDFPage, 0);
119 CurrDFPageByteDiv16 = 0;
123 if (Dataflash_GetSelectedChip() == DATAFLASH_CHIP_MASK(DATAFLASH_TOTALCHIPS)) {
124 UsingSecondBuffer = !(UsingSecondBuffer);
128 Dataflash_SelectChipFromPage(CurrDFPage);
130 #if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE)
134 Dataflash_WaitWhileBusy();
135 Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_MAINMEMTOBUFF2 : DF_CMD_MAINMEMTOBUFF1);
136 Dataflash_SendAddressBytes(CurrDFPage, 0);
137 Dataflash_WaitWhileBusy();
142 Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2WRITE : DF_CMD_BUFF1WRITE);
143 Dataflash_SendAddressBytes(0, 0);
165 CurrDFPageByteDiv16++;
181 Dataflash_WaitWhileBusy();
182 Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE);
183 Dataflash_SendAddressBytes(CurrDFPage, 0x00);
184 Dataflash_WaitWhileBusy();
192 Dataflash_DeselectChip();
209 uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);
212 Dataflash_SelectChipFromPage(CurrDFPage);
215 Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);
216 Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte);
217 Dataflash_SendByte(0x00);
218 Dataflash_SendByte(0x00);
219 Dataflash_SendByte(0x00);
220 Dataflash_SendByte(0x00);
227 while (TotalBlocks) {
228 uint8_t BytesInBlockDiv16 = 0;
244 if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) {
246 CurrDFPageByteDiv16 = 0;
250 Dataflash_SelectChipFromPage(CurrDFPage);
253 Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);
254 Dataflash_SendAddressBytes(CurrDFPage, 0);
255 Dataflash_SendByte(0x00);
256 Dataflash_SendByte(0x00);
257 Dataflash_SendByte(0x00);
258 Dataflash_SendByte(0x00);
280 CurrDFPageByteDiv16++;
301 Dataflash_DeselectChip();
319 uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);
320 bool UsingSecondBuffer =
false;
323 Dataflash_SelectChipFromPage(CurrDFPage);
325 #if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE)
327 Dataflash_SendByte(DF_CMD_MAINMEMTOBUFF1);
328 Dataflash_SendAddressBytes(CurrDFPage, 0);
329 Dataflash_WaitWhileBusy();
333 Dataflash_SendByte(DF_CMD_BUFF1WRITE);
334 Dataflash_SendAddressBytes(0, CurrDFPageByte);
336 while (TotalBlocks) {
337 uint8_t BytesInBlockDiv16 = 0;
342 if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) {
344 Dataflash_WaitWhileBusy();
345 Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE);
346 Dataflash_SendAddressBytes(CurrDFPage, 0);
349 CurrDFPageByteDiv16 = 0;
353 if (Dataflash_GetSelectedChip() == DATAFLASH_CHIP_MASK(DATAFLASH_TOTALCHIPS)) {
354 UsingSecondBuffer = !(UsingSecondBuffer);
358 Dataflash_SelectChipFromPage(CurrDFPage);
360 #if (DATAFLASH_PAGE_SIZE > VIRTUAL_MEMORY_BLOCK_SIZE)
364 Dataflash_WaitWhileBusy();
365 Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_MAINMEMTOBUFF2 : DF_CMD_MAINMEMTOBUFF1);
366 Dataflash_SendAddressBytes(CurrDFPage, 0);
367 Dataflash_WaitWhileBusy();
372 Dataflash_ToggleSelectedChipCS();
373 Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2WRITE : DF_CMD_BUFF1WRITE);
374 Dataflash_SendAddressBytes(0, 0);
378 for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++) {
379 Dataflash_SendByte(*(BufferPtr++));
383 CurrDFPageByteDiv16++;
394 Dataflash_WaitWhileBusy();
395 Dataflash_SendByte(UsingSecondBuffer ? DF_CMD_BUFF2TOMAINMEMWITHERASE : DF_CMD_BUFF1TOMAINMEMWITHERASE);
396 Dataflash_SendAddressBytes(CurrDFPage, 0x00);
397 Dataflash_WaitWhileBusy();
400 Dataflash_DeselectChip();
418 uint8_t CurrDFPageByteDiv16 = (CurrDFPageByte >> 4);
421 Dataflash_SelectChipFromPage(CurrDFPage);
424 Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);
425 Dataflash_SendAddressBytes(CurrDFPage, CurrDFPageByte);
426 Dataflash_SendByte(0x00);
427 Dataflash_SendByte(0x00);
428 Dataflash_SendByte(0x00);
429 Dataflash_SendByte(0x00);
431 while (TotalBlocks) {
432 uint8_t BytesInBlockDiv16 = 0;
437 if (CurrDFPageByteDiv16 == (DATAFLASH_PAGE_SIZE >> 4)) {
439 CurrDFPageByteDiv16 = 0;
443 Dataflash_SelectChipFromPage(CurrDFPage);
446 Dataflash_SendByte(DF_CMD_MAINMEMPAGEREAD);
447 Dataflash_SendAddressBytes(CurrDFPage, 0);
448 Dataflash_SendByte(0x00);
449 Dataflash_SendByte(0x00);
450 Dataflash_SendByte(0x00);
451 Dataflash_SendByte(0x00);
455 for (uint8_t ByteNum = 0; ByteNum < 16; ByteNum++) {
456 *(BufferPtr++) = Dataflash_ReceiveByte();
460 CurrDFPageByteDiv16++;
471 Dataflash_DeselectChip();
478 Dataflash_SelectChip(DATAFLASH_CHIP1);
479 Dataflash_SendByte(DF_CMD_GETSTATUS);
482 if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON) {
483 Dataflash_ToggleSelectedChipCS();
486 Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]);
487 Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]);
488 Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]);
489 Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]);
493 #if (DATAFLASH_TOTALCHIPS == 2)
494 Dataflash_SelectChip(DATAFLASH_CHIP2);
495 Dataflash_SendByte(DF_CMD_GETSTATUS);
498 if (Dataflash_ReceiveByte() & DF_STATUS_SECTORPROTECTION_ON) {
499 Dataflash_ToggleSelectedChipCS();
502 Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[0]);
503 Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[1]);
504 Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[2]);
505 Dataflash_SendByte(DF_CMD_SECTORPROTECTIONOFF[3]);
510 Dataflash_DeselectChip();
522 Dataflash_SelectChip(DATAFLASH_CHIP1);
523 Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO);
524 ReturnByte = Dataflash_ReceiveByte();
525 Dataflash_DeselectChip();
528 if (ReturnByte != DF_MANUFACTURER_ATMEL) {
532 #if (DATAFLASH_TOTALCHIPS == 2)
534 Dataflash_SelectChip(DATAFLASH_CHIP2);
535 Dataflash_SendByte(DF_CMD_READMANUFACTURERDEVICEINFO);
536 ReturnByte = Dataflash_ReceiveByte();
537 Dataflash_DeselectChip();
540 if (ReturnByte != DF_MANUFACTURER_ATMEL) {