Rihards Balass / 4DGL-mbed-32PTU
Committer:
CaptainR
Date:
Thu Sep 15 09:48:59 2016 +0000
Revision:
14:561cb06a2739
Parent:
13:1a0800957412
Child:
15:86bdf382e6f7
write sector

Who changed what in which revision?

UserRevisionLine numberNew contents of line
CaptainR 12:29f5ad896382 1 //
CaptainR 12:29f5ad896382 2 // Picaso_4DGL-32PTU is a class to drive 4D Systems TFT touch screens with PICASO processor
CaptainR 12:29f5ad896382 3 // Tested with NUCLEO L152RE development board
CaptainR 12:29f5ad896382 4 // Copyright (C) <2016> Rihards Balass <rihards.balass@gmail.com>
CaptainR 12:29f5ad896382 5 //
CaptainR 12:29f5ad896382 6 // Picaso_4DGL-32PTU is free software: you can redistribute it and/or modify
CaptainR 12:29f5ad896382 7 // it under the terms of the GNU General Public License as published by
CaptainR 12:29f5ad896382 8 // the Free Software Foundation, either version 3 of the License, or
CaptainR 12:29f5ad896382 9 // (at your option) any later version.
CaptainR 12:29f5ad896382 10 //
CaptainR 12:29f5ad896382 11 // Picaso_4DGL-32PTU is distributed in the hope that it will be useful,
CaptainR 12:29f5ad896382 12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
CaptainR 12:29f5ad896382 13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
CaptainR 12:29f5ad896382 14 // GNU General Public License for more details.
CaptainR 12:29f5ad896382 15 //
CaptainR 12:29f5ad896382 16 // You can see GNU General Public License at <http://www.gnu.org/licenses/>.
CaptainR 12:29f5ad896382 17 //
CaptainR 12:29f5ad896382 18
CaptainR 12:29f5ad896382 19 #include "mbed.h"
CaptainR 12:29f5ad896382 20 #include "Picaso_4DGL-32PTU.h"
CaptainR 12:29f5ad896382 21
CaptainR 12:29f5ad896382 22 //**************************************************************************
CaptainR 12:29f5ad896382 23 // The Media Init command initialises a uSD/SD/SDHC memory card for further operations.
CaptainR 12:29f5ad896382 24 // The SD card is connected to the SPI (serial peripheral interface) of the PICASO-GFX2 chip.
CaptainR 12:29f5ad896382 25 //**************************************************************************
CaptainR 12:29f5ad896382 26 short PICASO_4DGL :: media_Init() {
CaptainR 12:29f5ad896382 27
CaptainR 12:29f5ad896382 28 char command[2] = "";
CaptainR 12:29f5ad896382 29
CaptainR 12:29f5ad896382 30 command[0] = (MEDIA_INIT >> (8*1)) & 0xff;
CaptainR 12:29f5ad896382 31 command[1] = (MEDIA_INIT >> (8*0)) & 0xff;
CaptainR 12:29f5ad896382 32
CaptainR 12:29f5ad896382 33 writeCOMMAND(command, 2);
CaptainR 12:29f5ad896382 34 short success = mediaInitResponse();
CaptainR 12:29f5ad896382 35 #ifdef DEBUGMODE
CaptainR 12:29f5ad896382 36 pc.printf("\n\r DEBUG: uSD card INIT: %i\n\r", success);
CaptainR 12:29f5ad896382 37 #endif
CaptainR 12:29f5ad896382 38 return success;
CaptainR 12:29f5ad896382 39 }
CaptainR 12:29f5ad896382 40
CaptainR 12:29f5ad896382 41 //**************************************************************************
CaptainR 12:29f5ad896382 42 // The Set Byte Address command sets the media memory internal
CaptainR 12:29f5ad896382 43 // Address pointer for access at a non-sector aligned byte address.
CaptainR 12:29f5ad896382 44 //**************************************************************************
CaptainR 12:29f5ad896382 45 bool PICASO_4DGL :: media_SetAdd(int address) {
CaptainR 12:29f5ad896382 46
CaptainR 12:29f5ad896382 47 char command[6] = "";
CaptainR 12:29f5ad896382 48
CaptainR 12:29f5ad896382 49 command[0] = (MEDIA_SET_ADD >> (8*1)) & 0xff;
CaptainR 12:29f5ad896382 50 command[1] = (MEDIA_SET_ADD >> (8*0)) & 0xff;
CaptainR 12:29f5ad896382 51 command[2] = (address >> (8*3)) & 0xff;
CaptainR 12:29f5ad896382 52 command[3] = (address >> (8*2)) & 0xff;
CaptainR 12:29f5ad896382 53 command[4] = (address >> (8*1)) & 0xff;
CaptainR 12:29f5ad896382 54 command[5] = (address >> (8*0)) & 0xff;
CaptainR 12:29f5ad896382 55
CaptainR 12:29f5ad896382 56 writeCOMMAND(command, 6);
CaptainR 12:29f5ad896382 57 bool success = getResponse(1);
CaptainR 12:29f5ad896382 58 #ifdef DEBUGMODE
CaptainR 12:29f5ad896382 59 pc.printf("\n\r DEBUG: Set byte address: %i\n\r", success);
CaptainR 12:29f5ad896382 60 #endif
CaptainR 12:29f5ad896382 61 return success;
CaptainR 12:29f5ad896382 62 }
CaptainR 12:29f5ad896382 63
CaptainR 12:29f5ad896382 64 //**************************************************************************
CaptainR 12:29f5ad896382 65 // The Set Sector Address command sets the media memory internal Address pointer for sector access.
CaptainR 12:29f5ad896382 66 //**************************************************************************
CaptainR 12:29f5ad896382 67 bool PICASO_4DGL :: media_SetSector(int address) {
CaptainR 12:29f5ad896382 68
CaptainR 12:29f5ad896382 69 char command[6] = "";
CaptainR 12:29f5ad896382 70
CaptainR 12:29f5ad896382 71 command[0] = (MEDIA_SET_SECTOR >> (8*1)) & 0xff;
CaptainR 12:29f5ad896382 72 command[1] = (MEDIA_SET_SECTOR >> (8*0)) & 0xff;
CaptainR 12:29f5ad896382 73 command[2] = (address >> (8*3)) & 0xff;
CaptainR 12:29f5ad896382 74 command[3] = (address >> (8*2)) & 0xff;
CaptainR 12:29f5ad896382 75 command[4] = (address >> (8*1)) & 0xff;
CaptainR 12:29f5ad896382 76 command[5] = (address >> (8*0)) & 0xff;
CaptainR 12:29f5ad896382 77
CaptainR 12:29f5ad896382 78 writeCOMMAND(command, 6);
CaptainR 12:29f5ad896382 79 bool success = getResponse(1);
CaptainR 12:29f5ad896382 80 #ifdef DEBUGMODE
CaptainR 12:29f5ad896382 81 pc.printf("\n\r DEBUG: Set sector address: %i\n\r", success);
CaptainR 12:29f5ad896382 82 #endif
CaptainR 12:29f5ad896382 83 return success;
CaptainR 12:29f5ad896382 84 }
CaptainR 12:29f5ad896382 85
CaptainR 12:29f5ad896382 86 //**************************************************************************
CaptainR 12:29f5ad896382 87 // The Read Sector command reads and returns 512 bytes (256 words)
CaptainR 12:29f5ad896382 88 // pointed to by the internal Sector pointer, determined by the
CaptainR 12:29f5ad896382 89 // “Set Sector Address” command.
CaptainR 12:29f5ad896382 90 // After the read the Sector pointer is automatically incremented by 1.
CaptainR 12:29f5ad896382 91 // Answer = acknowledge (byte) , status (word), block (sector) = 1 + 2 + 512 = 515 bytes
CaptainR 12:29f5ad896382 92 //**************************************************************************
CaptainR 13:1a0800957412 93 bool PICASO_4DGL :: media_RdSector() {
CaptainR 12:29f5ad896382 94
CaptainR 12:29f5ad896382 95 char command[2] = "";
CaptainR 12:29f5ad896382 96
CaptainR 12:29f5ad896382 97 command[0] = (MEDIA_READ_SECTOR >> (8*1)) & 0xff;
CaptainR 12:29f5ad896382 98 command[1] = (MEDIA_READ_SECTOR >> (8*0)) & 0xff;
CaptainR 12:29f5ad896382 99
CaptainR 12:29f5ad896382 100 writeCOMMAND(command, 2);
CaptainR 12:29f5ad896382 101 bool success = readSectorResponse(515);
CaptainR 12:29f5ad896382 102 #ifdef DEBUGMODE
CaptainR 13:1a0800957412 103 pc.printf("\n\r DEBUG: Read sector: %i\n\r", success);
CaptainR 12:29f5ad896382 104 #endif
CaptainR 12:29f5ad896382 105 return success;
CaptainR 12:29f5ad896382 106 }
CaptainR 12:29f5ad896382 107
CaptainR 12:29f5ad896382 108 //**************************************************************************
CaptainR 12:29f5ad896382 109 // The Write Sector command writes 512 bytes (256 words) from a source memory
CaptainR 12:29f5ad896382 110 // block into the uSD card. After the write the Sect pointer is automatically incremented by 1.
CaptainR 12:29f5ad896382 111 // Response = acknowledge (byte) , status (word)
CaptainR 12:29f5ad896382 112 //**************************************************************************
CaptainR 13:1a0800957412 113 bool PICASO_4DGL :: media_WrSector(char *block) {
CaptainR 12:29f5ad896382 114
CaptainR 12:29f5ad896382 115 char command[514] = "";
CaptainR 14:561cb06a2739 116 bool success = false;
CaptainR 12:29f5ad896382 117
CaptainR 12:29f5ad896382 118 command[0] = (MEDIA_WRITE_SECTOR >> (8*1)) & 0xff;
CaptainR 12:29f5ad896382 119 command[1] = (MEDIA_WRITE_SECTOR >> (8*0)) & 0xff;
CaptainR 12:29f5ad896382 120
CaptainR 14:561cb06a2739 121 if (strlen(block) <= 512) {
CaptainR 14:561cb06a2739 122 int j = 513 - strlen(block);
CaptainR 14:561cb06a2739 123 for (int i = 0; i < strlen(block); i++) {
CaptainR 14:561cb06a2739 124 command[j++] = block[i];
CaptainR 14:561cb06a2739 125 }
CaptainR 14:561cb06a2739 126 success = media_WrData(command, 514);
CaptainR 14:561cb06a2739 127 }
CaptainR 14:561cb06a2739 128 else { // data is bigger than one block
CaptainR 14:561cb06a2739 129 int j = 513 - (strlen(block) % 512); // set the first block pointer
CaptainR 14:561cb06a2739 130 for (int i = 0; i < strlen(block); i++) {
CaptainR 14:561cb06a2739 131 if (j == 513) {
CaptainR 14:561cb06a2739 132 success = media_WrData(command, 514);
CaptainR 14:561cb06a2739 133 #if DEBUGMODE
CaptainR 14:561cb06a2739 134 pc.printf("\n\r DEBUG: Block send = %i", success);
CaptainR 14:561cb06a2739 135 #endif
CaptainR 14:561cb06a2739 136 j = 2;
CaptainR 14:561cb06a2739 137 command[j++] = block[i];
CaptainR 14:561cb06a2739 138 }
CaptainR 14:561cb06a2739 139 else if (i == (strlen(block) - 1)) {
CaptainR 14:561cb06a2739 140 command[j] = block[i];
CaptainR 14:561cb06a2739 141 success = media_WrData(command, 514);
CaptainR 14:561cb06a2739 142 }
CaptainR 14:561cb06a2739 143 else command[j++] = block[i];
CaptainR 14:561cb06a2739 144 }
CaptainR 14:561cb06a2739 145 }
CaptainR 14:561cb06a2739 146 return success;
CaptainR 14:561cb06a2739 147 }
CaptainR 14:561cb06a2739 148
CaptainR 14:561cb06a2739 149 bool PICASO_4DGL :: media_WrData(char *block, int size) {
CaptainR 14:561cb06a2739 150
CaptainR 14:561cb06a2739 151 #if DEBUGMODE
CaptainR 14:561cb06a2739 152 pc.printf("\n\r DEBUG: Write block =");
CaptainR 14:561cb06a2739 153 for (int k = 2; k < size; k++) {
CaptainR 14:561cb06a2739 154 pc.printf(" %02X", block[k]);
CaptainR 14:561cb06a2739 155 }
CaptainR 14:561cb06a2739 156 pc.printf("\n\r");
CaptainR 12:29f5ad896382 157 #endif
CaptainR 14:561cb06a2739 158 writeCOMMAND(block, size);
CaptainR 14:561cb06a2739 159 bool success = writeSectorResponse(3);
CaptainR 12:29f5ad896382 160 return success;
CaptainR 12:29f5ad896382 161 }
CaptainR 12:29f5ad896382 162
CaptainR 12:29f5ad896382 163
CaptainR 12:29f5ad896382 164
CaptainR 12:29f5ad896382 165
CaptainR 12:29f5ad896382 166
CaptainR 12:29f5ad896382 167
CaptainR 12:29f5ad896382 168
CaptainR 12:29f5ad896382 169
CaptainR 12:29f5ad896382 170
CaptainR 12:29f5ad896382 171
CaptainR 12:29f5ad896382 172
CaptainR 12:29f5ad896382 173
CaptainR 12:29f5ad896382 174
CaptainR 12:29f5ad896382 175
CaptainR 12:29f5ad896382 176
CaptainR 12:29f5ad896382 177
CaptainR 12:29f5ad896382 178
CaptainR 12:29f5ad896382 179
CaptainR 12:29f5ad896382 180
CaptainR 12:29f5ad896382 181
CaptainR 12:29f5ad896382 182
CaptainR 12:29f5ad896382 183
CaptainR 12:29f5ad896382 184
CaptainR 12:29f5ad896382 185
CaptainR 12:29f5ad896382 186
CaptainR 12:29f5ad896382 187
CaptainR 12:29f5ad896382 188
CaptainR 12:29f5ad896382 189
CaptainR 12:29f5ad896382 190
CaptainR 12:29f5ad896382 191
CaptainR 12:29f5ad896382 192