iSDIO library for FlashAir
Dependents: FlashAir_iSDIO_sample FlashAir_iSDIO_16seg_ADT7410_step1 FlashAir_iSDIO_16seg_ADT7410 FlashAir_iSDIO_sample_OS5_ ... more
iSDIO.cpp@2:b8b33621e7fe, 2019-01-19 (annotated)
- Committer:
- hogejun
- Date:
- Sat Jan 19 04:31:16 2019 +0000
- Revision:
- 2:b8b33621e7fe
- Parent:
- 1:dc888b9028cf
modified debug output
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
hogejun | 0:89c6aae3a486 | 1 | /* mbed SD iSDIO Library |
hogejun | 1:dc888b9028cf | 2 | * Copyright (C) 2018 by Junichi SHIBA, PIAX Inc. |
hogejun | 0:89c6aae3a486 | 3 | * |
hogejun | 0:89c6aae3a486 | 4 | * Arduino Sdio Library |
hogejun | 0:89c6aae3a486 | 5 | * Copyright (C) 2014 by Munehiro Doi |
hogejun | 0:89c6aae3a486 | 6 | * |
hogejun | 0:89c6aae3a486 | 7 | * This file is an SD extension of the Arduino Sd2Card Library |
hogejun | 0:89c6aae3a486 | 8 | * Copyright (C) 2009 by William Greiman |
hogejun | 0:89c6aae3a486 | 9 | * |
hogejun | 0:89c6aae3a486 | 10 | * This Library is free software: you can redistribute it and/or modify |
hogejun | 0:89c6aae3a486 | 11 | * it under the terms of the GNU General Public License as published by |
hogejun | 0:89c6aae3a486 | 12 | * the Free Software Foundation, either version 3 of the License, or |
hogejun | 0:89c6aae3a486 | 13 | * (at your option) any later version. |
hogejun | 0:89c6aae3a486 | 14 | * |
hogejun | 0:89c6aae3a486 | 15 | * This Library is distributed in the hope that it will be useful, |
hogejun | 0:89c6aae3a486 | 16 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
hogejun | 0:89c6aae3a486 | 17 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
hogejun | 0:89c6aae3a486 | 18 | * GNU General Public License for more details. |
hogejun | 0:89c6aae3a486 | 19 | * |
hogejun | 0:89c6aae3a486 | 20 | * You should have received a copy of the GNU General Public License |
hogejun | 0:89c6aae3a486 | 21 | * along with the Arduino Sd2Card Library. If not, see |
hogejun | 0:89c6aae3a486 | 22 | * <http://www.gnu.org/licenses/>. |
hogejun | 0:89c6aae3a486 | 23 | */ |
hogejun | 0:89c6aae3a486 | 24 | #include "mbed.h" |
hogejun | 0:89c6aae3a486 | 25 | #include "iSDIO.h" |
hogejun | 0:89c6aae3a486 | 26 | |
hogejun | 0:89c6aae3a486 | 27 | //------------------------------------------------------------------------------ |
hogejun | 0:89c6aae3a486 | 28 | // SD extension commands |
hogejun | 0:89c6aae3a486 | 29 | /** EXTENSION READ - Extension Register Read Command (Single Block) */ |
hogejun | 0:89c6aae3a486 | 30 | uint8_t const CMD48 = 0X30; |
hogejun | 0:89c6aae3a486 | 31 | /** EXTENSION WRITE - Extension Register Write Command (Single Block) */ |
hogejun | 0:89c6aae3a486 | 32 | uint8_t const CMD49 = 0X31; |
hogejun | 0:89c6aae3a486 | 33 | /** EXTENSION READ - Extension Register Read Command (Multi Block) */ |
hogejun | 0:89c6aae3a486 | 34 | uint8_t const CMD17 = 17; |
hogejun | 0:89c6aae3a486 | 35 | /** EXTENSION READ - Extension Register Read Command (Multi Block) */ |
hogejun | 0:89c6aae3a486 | 36 | uint8_t const CMD24 = 24; |
hogejun | 0:89c6aae3a486 | 37 | |
hogejun | 0:89c6aae3a486 | 38 | //------------------------------------------------------------------------------ |
hogejun | 0:89c6aae3a486 | 39 | // SD extension error codes. |
hogejun | 0:89c6aae3a486 | 40 | /** card returned an error response for CMD48 (read extension block) */ |
hogejun | 0:89c6aae3a486 | 41 | uint8_t const SD_CARD_ERROR_CMD48 = 0X80; |
hogejun | 0:89c6aae3a486 | 42 | /** card returned an error response for CMD49 (write extension block) */ |
hogejun | 0:89c6aae3a486 | 43 | uint8_t const SD_CARD_ERROR_CMD49 = 0X81; |
hogejun | 0:89c6aae3a486 | 44 | //------------------------------------------------------------------------------ |
hogejun | 0:89c6aae3a486 | 45 | |
hogejun | 0:89c6aae3a486 | 46 | iSDIO::iSDIO(PinName mosi, PinName miso, PinName sclk, PinName cs, const char* name, Serial* console) : |
hogejun | 0:89c6aae3a486 | 47 | SDFileSystem(mosi, miso, sclk, cs, name) |
hogejun | 0:89c6aae3a486 | 48 | { |
hogejun | 0:89c6aae3a486 | 49 | instance = this; |
hogejun | 0:89c6aae3a486 | 50 | _console = console; |
hogejun | 0:89c6aae3a486 | 51 | sequenceId = 0; |
hogejun | 2:b8b33621e7fe | 52 | if (_console != NULL) |
hogejun | 0:89c6aae3a486 | 53 | _console->printf("new iSDIO\n"); |
hogejun | 0:89c6aae3a486 | 54 | } |
hogejun | 0:89c6aae3a486 | 55 | |
hogejun | 0:89c6aae3a486 | 56 | iSDIO::~iSDIO(void) {} |
hogejun | 0:89c6aae3a486 | 57 | |
hogejun | 0:89c6aae3a486 | 58 | iSDIO* iSDIO::instance = 0; |
hogejun | 0:89c6aae3a486 | 59 | |
hogejun | 0:89c6aae3a486 | 60 | iSDIO* iSDIO::getInstance() |
hogejun | 0:89c6aae3a486 | 61 | { |
hogejun | 0:89c6aae3a486 | 62 | return iSDIO::instance; |
hogejun | 0:89c6aae3a486 | 63 | } |
hogejun | 0:89c6aae3a486 | 64 | |
hogejun | 0:89c6aae3a486 | 65 | uint32_t iSDIO::getSequenceId() |
hogejun | 0:89c6aae3a486 | 66 | { |
hogejun | 2:b8b33621e7fe | 67 | if (_console != NULL) |
hogejun | 0:89c6aae3a486 | 68 | _console->printf("sequenceId: %d\n", sequenceId); |
hogejun | 0:89c6aae3a486 | 69 | return sequenceId; |
hogejun | 0:89c6aae3a486 | 70 | } |
hogejun | 0:89c6aae3a486 | 71 | |
hogejun | 0:89c6aae3a486 | 72 | uint32_t iSDIO::getNextSequenceId() |
hogejun | 0:89c6aae3a486 | 73 | { |
hogejun | 0:89c6aae3a486 | 74 | sequenceId++; |
hogejun | 2:b8b33621e7fe | 75 | if (_console != NULL) |
hogejun | 0:89c6aae3a486 | 76 | _console->printf("Next sequenceId: %d\n", sequenceId); |
hogejun | 0:89c6aae3a486 | 77 | return sequenceId; |
hogejun | 0:89c6aae3a486 | 78 | } |
hogejun | 0:89c6aae3a486 | 79 | |
hogejun | 0:89c6aae3a486 | 80 | uint8_t const DATA_START_BLOCK = 0XFE ; |
hogejun | 0:89c6aae3a486 | 81 | uint8_t const DATA_RES_MASK = 0X1F ; |
hogejun | 0:89c6aae3a486 | 82 | uint8_t const DATA_RES_ACCEPTED = 0X05 ; |
hogejun | 0:89c6aae3a486 | 83 | |
hogejun | 0:89c6aae3a486 | 84 | //------------------------------------------------------------------------------ |
hogejun | 0:89c6aae3a486 | 85 | /** Perform Extention Read. */ |
hogejun | 0:89c6aae3a486 | 86 | uint8_t iSDIO::readExt(uint32_t arg, uint8_t* dst, uint16_t count) |
hogejun | 0:89c6aae3a486 | 87 | { |
hogejun | 0:89c6aae3a486 | 88 | uint16_t i; |
hogejun | 0:89c6aae3a486 | 89 | // send command and argument. |
hogejun | 0:89c6aae3a486 | 90 | if (_cmd(CMD48, arg) && _cmd(CMD17, arg)) { |
hogejun | 0:89c6aae3a486 | 91 | error("SD_CARD_ERROR_CMD48"); |
hogejun | 0:89c6aae3a486 | 92 | _cs = 1; |
hogejun | 0:89c6aae3a486 | 93 | return false; |
hogejun | 0:89c6aae3a486 | 94 | } |
hogejun | 0:89c6aae3a486 | 95 | |
hogejun | 0:89c6aae3a486 | 96 | _cs = 0; |
hogejun | 0:89c6aae3a486 | 97 | |
hogejun | 0:89c6aae3a486 | 98 | // wait for start block token. |
hogejun | 0:89c6aae3a486 | 99 | while (_spi.write(0xFF) == 0xFF); |
hogejun | 0:89c6aae3a486 | 100 | |
hogejun | 0:89c6aae3a486 | 101 | // receive data |
hogejun | 0:89c6aae3a486 | 102 | for (i = 0; i < count; ++i) { |
hogejun | 0:89c6aae3a486 | 103 | dst[i] = _spi.write(0xFF); |
hogejun | 0:89c6aae3a486 | 104 | } |
hogejun | 0:89c6aae3a486 | 105 | // skip dummy bytes and 16-bit crc. |
hogejun | 0:89c6aae3a486 | 106 | for (; i < 514; ++i) { |
hogejun | 0:89c6aae3a486 | 107 | _spi.write(0xFF); |
hogejun | 0:89c6aae3a486 | 108 | } |
hogejun | 0:89c6aae3a486 | 109 | _cs = 1; |
hogejun | 0:89c6aae3a486 | 110 | _spi.write(0xFF); // dummy clock to force FlashAir finish the command. |
hogejun | 0:89c6aae3a486 | 111 | return true; |
hogejun | 0:89c6aae3a486 | 112 | } |
hogejun | 0:89c6aae3a486 | 113 | |
hogejun | 0:89c6aae3a486 | 114 | //------------------------------------------------------------------------------ |
hogejun | 0:89c6aae3a486 | 115 | /** Perform Extention Write. */ |
hogejun | 0:89c6aae3a486 | 116 | uint8_t iSDIO::writeExt(uint32_t arg, const uint8_t* src, uint16_t count) |
hogejun | 0:89c6aae3a486 | 117 | { |
hogejun | 0:89c6aae3a486 | 118 | uint16_t i; |
hogejun | 0:89c6aae3a486 | 119 | uint8_t status; |
hogejun | 0:89c6aae3a486 | 120 | // send command and argument. |
hogejun | 0:89c6aae3a486 | 121 | if (_cmd(CMD49, arg) && _cmd(CMD24, arg)) { |
hogejun | 0:89c6aae3a486 | 122 | error("SD_CARD_ERROR_CMD49"); |
hogejun | 0:89c6aae3a486 | 123 | _cs = 1; |
hogejun | 0:89c6aae3a486 | 124 | return false; |
hogejun | 0:89c6aae3a486 | 125 | } |
hogejun | 0:89c6aae3a486 | 126 | |
hogejun | 0:89c6aae3a486 | 127 | _cs = 0; |
hogejun | 0:89c6aae3a486 | 128 | |
hogejun | 0:89c6aae3a486 | 129 | // send start block token. |
hogejun | 0:89c6aae3a486 | 130 | _spi.write(DATA_START_BLOCK); |
hogejun | 0:89c6aae3a486 | 131 | //////_spi.write(0xFE); |
hogejun | 0:89c6aae3a486 | 132 | // send data |
hogejun | 0:89c6aae3a486 | 133 | for (i = 0; i < count; ++i) { |
hogejun | 0:89c6aae3a486 | 134 | _spi.write(src[i]); |
hogejun | 0:89c6aae3a486 | 135 | } |
hogejun | 0:89c6aae3a486 | 136 | // send dummy bytes until 512 bytes. |
hogejun | 0:89c6aae3a486 | 137 | for (; i < 512; ++i) { |
hogejun | 0:89c6aae3a486 | 138 | _spi.write(0xFF); |
hogejun | 0:89c6aae3a486 | 139 | } |
hogejun | 0:89c6aae3a486 | 140 | // dummy 16-bit crc |
hogejun | 0:89c6aae3a486 | 141 | _spi.write(0xFF); |
hogejun | 0:89c6aae3a486 | 142 | _spi.write(0xFF); |
hogejun | 0:89c6aae3a486 | 143 | // wait a data response token |
hogejun | 0:89c6aae3a486 | 144 | status = _spi.write(0xFF); |
hogejun | 0:89c6aae3a486 | 145 | if ((status & DATA_RES_MASK) != DATA_RES_ACCEPTED) { |
hogejun | 0:89c6aae3a486 | 146 | //////if ((status & 0x1F) != 0x05) { |
hogejun | 0:89c6aae3a486 | 147 | error("SD_CARD_ERROR_WRITE"); |
hogejun | 0:89c6aae3a486 | 148 | _cs = 1; |
hogejun | 0:89c6aae3a486 | 149 | return false; |
hogejun | 0:89c6aae3a486 | 150 | } |
hogejun | 0:89c6aae3a486 | 151 | // wait for flash programming to complete |
hogejun | 0:89c6aae3a486 | 152 | while (_spi.write(0xFF) == 0); |
hogejun | 0:89c6aae3a486 | 153 | |
hogejun | 0:89c6aae3a486 | 154 | _cs = 1; |
hogejun | 0:89c6aae3a486 | 155 | return true; |
hogejun | 0:89c6aae3a486 | 156 | } |
hogejun | 0:89c6aae3a486 | 157 | |
hogejun | 0:89c6aae3a486 | 158 | //------------------------------------------------------------------------------ |
hogejun | 0:89c6aae3a486 | 159 | /** |
hogejun | 0:89c6aae3a486 | 160 | * Read a 512 byte data port in an extension register space. |
hogejun | 0:89c6aae3a486 | 161 | * |
hogejun | 0:89c6aae3a486 | 162 | * \return The value one, true, is returned for success and |
hogejun | 0:89c6aae3a486 | 163 | * the value zero, false, is returned for failure. |
hogejun | 0:89c6aae3a486 | 164 | */ |
hogejun | 0:89c6aae3a486 | 165 | uint8_t iSDIO::readExtDataPort(uint8_t mio, uint8_t func, uint16_t addr, uint8_t* dst) |
hogejun | 0:89c6aae3a486 | 166 | { |
hogejun | 0:89c6aae3a486 | 167 | uint32_t arg = |
hogejun | 0:89c6aae3a486 | 168 | (((uint32_t)mio & 0x1) << 31) | |
hogejun | 0:89c6aae3a486 | 169 | (mio ? (((uint32_t)func & 0x7) << 28) : (((uint32_t)func & 0xF) << 27)) | |
hogejun | 0:89c6aae3a486 | 170 | (((uint32_t)addr & 0x1FE00) << 9); |
hogejun | 0:89c6aae3a486 | 171 | return readExt(arg, dst, 512); |
hogejun | 0:89c6aae3a486 | 172 | } |
hogejun | 0:89c6aae3a486 | 173 | |
hogejun | 0:89c6aae3a486 | 174 | //------------------------------------------------------------------------------ |
hogejun | 0:89c6aae3a486 | 175 | /** |
hogejun | 0:89c6aae3a486 | 176 | * Read an extension register space. |
hogejun | 0:89c6aae3a486 | 177 | * |
hogejun | 0:89c6aae3a486 | 178 | * \return The value one, true, is returned for success and |
hogejun | 0:89c6aae3a486 | 179 | * the value zero, false, is returned for failure. |
hogejun | 0:89c6aae3a486 | 180 | */ |
hogejun | 0:89c6aae3a486 | 181 | uint8_t iSDIO::readExtMemory(uint8_t mio, uint8_t func, uint32_t addr, uint16_t count, uint8_t* dst) |
hogejun | 0:89c6aae3a486 | 182 | { |
hogejun | 0:89c6aae3a486 | 183 | uint32_t offset = addr & 0x1FF; |
hogejun | 0:89c6aae3a486 | 184 | if (offset + count > 512) count = 512 - offset; |
hogejun | 0:89c6aae3a486 | 185 | if (count == 0) return true; |
hogejun | 0:89c6aae3a486 | 186 | uint32_t arg = |
hogejun | 0:89c6aae3a486 | 187 | (((uint32_t)mio & 0x1) << 31) | |
hogejun | 0:89c6aae3a486 | 188 | (mio ? (((uint32_t)func & 0x7) << 28) : (((uint32_t)func & 0xF) << 27)) | |
hogejun | 0:89c6aae3a486 | 189 | ((addr & 0x1FFFF) << 9) | |
hogejun | 0:89c6aae3a486 | 190 | ((count - 1) & 0x1FF); |
hogejun | 0:89c6aae3a486 | 191 | return readExt(arg, dst, count); |
hogejun | 0:89c6aae3a486 | 192 | } |
hogejun | 0:89c6aae3a486 | 193 | |
hogejun | 0:89c6aae3a486 | 194 | //------------------------------------------------------------------------------ |
hogejun | 0:89c6aae3a486 | 195 | /** |
hogejun | 0:89c6aae3a486 | 196 | * Write a 512 byte data port into an extension register space. |
hogejun | 0:89c6aae3a486 | 197 | * |
hogejun | 0:89c6aae3a486 | 198 | * \return The value one, true, is returned for success and |
hogejun | 0:89c6aae3a486 | 199 | * the value zero, false, is returned for failure. |
hogejun | 0:89c6aae3a486 | 200 | */ |
hogejun | 0:89c6aae3a486 | 201 | uint8_t iSDIO::writeExtDataPort(uint8_t mio, uint8_t func, uint16_t addr, const uint8_t* src) |
hogejun | 0:89c6aae3a486 | 202 | { |
hogejun | 0:89c6aae3a486 | 203 | uint32_t arg = |
hogejun | 0:89c6aae3a486 | 204 | (((uint32_t)mio & 0x1) << 31) | |
hogejun | 0:89c6aae3a486 | 205 | (mio ? (((uint32_t)func & 0x7) << 28) : (((uint32_t)func & 0xF) << 27)) | |
hogejun | 0:89c6aae3a486 | 206 | (((uint32_t)addr & 0x1FE00) << 9); |
hogejun | 2:b8b33621e7fe | 207 | if (_console != NULL) |
hogejun | 0:89c6aae3a486 | 208 | _console->printf("arg = %08x\n", arg); |
hogejun | 0:89c6aae3a486 | 209 | return writeExt(arg, src, 512); |
hogejun | 0:89c6aae3a486 | 210 | } |
hogejun | 0:89c6aae3a486 | 211 | |
hogejun | 0:89c6aae3a486 | 212 | //------------------------------------------------------------------------------ |
hogejun | 0:89c6aae3a486 | 213 | /** |
hogejun | 0:89c6aae3a486 | 214 | * Write an extension register space. |
hogejun | 0:89c6aae3a486 | 215 | * |
hogejun | 0:89c6aae3a486 | 216 | * \return The value one, true, is returned for success and |
hogejun | 0:89c6aae3a486 | 217 | * the value zero, false, is returned for failure. |
hogejun | 0:89c6aae3a486 | 218 | */ |
hogejun | 0:89c6aae3a486 | 219 | uint8_t iSDIO::writeExtMemory(uint8_t mio, uint8_t func, uint32_t addr, uint16_t count, const uint8_t* src) |
hogejun | 0:89c6aae3a486 | 220 | { |
hogejun | 0:89c6aae3a486 | 221 | uint32_t arg = |
hogejun | 0:89c6aae3a486 | 222 | (((uint32_t)mio & 0x1) << 31) | |
hogejun | 0:89c6aae3a486 | 223 | (mio ? (((uint32_t)func & 0x7) << 28) : (((uint32_t)func & 0xF) << 27)) | |
hogejun | 0:89c6aae3a486 | 224 | ((addr & 0x1FFFF) << 9) | |
hogejun | 0:89c6aae3a486 | 225 | ((count - 1) & 0x1FF); |
hogejun | 2:b8b33621e7fe | 226 | if (_console != NULL) { |
hogejun | 0:89c6aae3a486 | 227 | _console->printf("writeExtMemory: "); |
hogejun | 0:89c6aae3a486 | 228 | _console->printf(" addr: %08x\n", addr); |
hogejun | 0:89c6aae3a486 | 229 | _console->printf(" src: "); |
hogejun | 2:b8b33621e7fe | 230 | } |
hogejun | 0:89c6aae3a486 | 231 | printHex((uint8_t*)src, (uint32_t)count); |
hogejun | 2:b8b33621e7fe | 232 | if (_console != NULL) |
hogejun | 0:89c6aae3a486 | 233 | _console->printf(" count: %d\n", count); |
hogejun | 0:89c6aae3a486 | 234 | return writeExt(arg, src, count); |
hogejun | 0:89c6aae3a486 | 235 | } |
hogejun | 0:89c6aae3a486 | 236 | |
hogejun | 0:89c6aae3a486 | 237 | //------------------------------------------------------------------------------ |
hogejun | 0:89c6aae3a486 | 238 | /** |
hogejun | 0:89c6aae3a486 | 239 | * Writes a byte-data with mask into an extension register space. |
hogejun | 0:89c6aae3a486 | 240 | * |
hogejun | 0:89c6aae3a486 | 241 | * \return The value one, true, is returned for success and |
hogejun | 0:89c6aae3a486 | 242 | * the value zero, false, is returned for failure. |
hogejun | 0:89c6aae3a486 | 243 | */ |
hogejun | 0:89c6aae3a486 | 244 | uint8_t iSDIO::writeExtMask(uint8_t mio, uint8_t func, uint32_t addr, uint8_t mask, const uint8_t* src) |
hogejun | 0:89c6aae3a486 | 245 | { |
hogejun | 0:89c6aae3a486 | 246 | uint32_t arg = |
hogejun | 0:89c6aae3a486 | 247 | (((uint32_t)mio & 0x1) << 31) | |
hogejun | 0:89c6aae3a486 | 248 | (mio ? (((uint32_t)func & 0x7) << 28) : (((uint32_t)func & 0xF) << 27)) | |
hogejun | 0:89c6aae3a486 | 249 | (0x1 << 26) | |
hogejun | 0:89c6aae3a486 | 250 | ((addr & 0x1FFFF) << 9) | |
hogejun | 0:89c6aae3a486 | 251 | mask; |
hogejun | 0:89c6aae3a486 | 252 | return writeExt(arg, src, 1); |
hogejun | 0:89c6aae3a486 | 253 | } |
hogejun | 0:89c6aae3a486 | 254 | |
hogejun | 0:89c6aae3a486 | 255 | |
hogejun | 0:89c6aae3a486 | 256 | uint8_t iSDIO::waitResponse(uint32_t sequenceId) |
hogejun | 0:89c6aae3a486 | 257 | { |
hogejun | 0:89c6aae3a486 | 258 | uint8_t buffer[ISDIO_STATUS_QUEUE_SIZE]; |
hogejun | 2:b8b33621e7fe | 259 | if(_console != NULL) |
hogejun | 0:89c6aae3a486 | 260 | _console->printf("\nWaiting response "); |
hogejun | 0:89c6aae3a486 | 261 | uint8_t prev = 0xFF; |
hogejun | 0:89c6aae3a486 | 262 | for (int i = 0; i < 20; ++i) { |
hogejun | 0:89c6aae3a486 | 263 | memset(buffer, 0, ISDIO_STATUS_QUEUE_SIZE); |
hogejun | 0:89c6aae3a486 | 264 | // Read command response status. |
hogejun | 0:89c6aae3a486 | 265 | if (!readExtMemory(MIO_IO, FUNC1, ISDIO_STATUS_QUEUE, ISDIO_STATUS_QUEUE_SIZE, buffer)) { |
hogejun | 0:89c6aae3a486 | 266 | return false; |
hogejun | 0:89c6aae3a486 | 267 | } |
hogejun | 0:89c6aae3a486 | 268 | uint8_t resp = get_u8(buffer + 8); |
hogejun | 0:89c6aae3a486 | 269 | if (sequenceId == get_u32(buffer + 4)) { |
hogejun | 0:89c6aae3a486 | 270 | if (prev != resp) { |
hogejun | 0:89c6aae3a486 | 271 | switch (resp) { |
hogejun | 0:89c6aae3a486 | 272 | case 0x00: |
hogejun | 2:b8b33621e7fe | 273 | if (_console != NULL) |
hogejun | 0:89c6aae3a486 | 274 | _console->printf("\n Initial"); |
hogejun | 0:89c6aae3a486 | 275 | break; |
hogejun | 0:89c6aae3a486 | 276 | case 0x01: |
hogejun | 2:b8b33621e7fe | 277 | if (_console != NULL) |
hogejun | 0:89c6aae3a486 | 278 | _console->printf("\n Command Processing"); |
hogejun | 0:89c6aae3a486 | 279 | break; |
hogejun | 0:89c6aae3a486 | 280 | case 0x02: |
hogejun | 2:b8b33621e7fe | 281 | if (_console != NULL) |
hogejun | 0:89c6aae3a486 | 282 | _console->printf("\n Command Rejected"); |
hogejun | 0:89c6aae3a486 | 283 | return false; |
hogejun | 0:89c6aae3a486 | 284 | case 0x03: |
hogejun | 2:b8b33621e7fe | 285 | if (_console != NULL) |
hogejun | 0:89c6aae3a486 | 286 | _console->printf("\n Process Succeeded"); |
hogejun | 0:89c6aae3a486 | 287 | return true; |
hogejun | 0:89c6aae3a486 | 288 | case 0x04: |
hogejun | 2:b8b33621e7fe | 289 | if (_console != NULL) |
hogejun | 0:89c6aae3a486 | 290 | _console->printf("\n Process Terminated"); |
hogejun | 0:89c6aae3a486 | 291 | return false; |
hogejun | 0:89c6aae3a486 | 292 | default: |
hogejun | 2:b8b33621e7fe | 293 | if (_console != NULL) { |
hogejun | 0:89c6aae3a486 | 294 | _console->printf("\n Process Failed "); |
hogejun | 0:89c6aae3a486 | 295 | _console->printf("%x", resp); |
hogejun | 2:b8b33621e7fe | 296 | } |
hogejun | 0:89c6aae3a486 | 297 | return false; |
hogejun | 0:89c6aae3a486 | 298 | } |
hogejun | 0:89c6aae3a486 | 299 | prev = resp; |
hogejun | 0:89c6aae3a486 | 300 | } |
hogejun | 0:89c6aae3a486 | 301 | } |
hogejun | 2:b8b33621e7fe | 302 | if (_console != NULL) |
hogejun | 0:89c6aae3a486 | 303 | _console->printf("."); |
hogejun | 0:89c6aae3a486 | 304 | wait_ms(1000); |
hogejun | 0:89c6aae3a486 | 305 | } |
hogejun | 0:89c6aae3a486 | 306 | return false; |
hogejun | 0:89c6aae3a486 | 307 | } |
hogejun | 0:89c6aae3a486 | 308 | |
hogejun | 0:89c6aae3a486 | 309 | |
hogejun | 0:89c6aae3a486 | 310 | |
hogejun | 0:89c6aae3a486 | 311 | void iSDIO::printByte(uint8_t value) |
hogejun | 0:89c6aae3a486 | 312 | { |
hogejun | 2:b8b33621e7fe | 313 | if (_console != NULL) { |
hogejun | 0:89c6aae3a486 | 314 | _console->printf("%x", value >> 4); |
hogejun | 0:89c6aae3a486 | 315 | _console->printf("%x", value & 0xF); |
hogejun | 2:b8b33621e7fe | 316 | } |
hogejun | 0:89c6aae3a486 | 317 | } |
hogejun | 0:89c6aae3a486 | 318 | void iSDIO::printBytes(uint8_t* p, uint32_t len) |
hogejun | 0:89c6aae3a486 | 319 | { |
hogejun | 0:89c6aae3a486 | 320 | for (int i = 0; i < len; ++i) { |
hogejun | 0:89c6aae3a486 | 321 | printByte(p[i]); |
hogejun | 0:89c6aae3a486 | 322 | } |
hogejun | 0:89c6aae3a486 | 323 | } |
hogejun | 0:89c6aae3a486 | 324 | void iSDIO::printHex(uint8_t* p, uint32_t len) { |
hogejun | 0:89c6aae3a486 | 325 | int i = 0; |
hogejun | 0:89c6aae3a486 | 326 | while (i < len) { |
hogejun | 0:89c6aae3a486 | 327 | if ((i & 0xf) == 0) { |
hogejun | 2:b8b33621e7fe | 328 | if (_console != NULL) |
hogejun | 0:89c6aae3a486 | 329 | _console->printf("\n"); |
hogejun | 0:89c6aae3a486 | 330 | printByte(i >> 4); |
hogejun | 2:b8b33621e7fe | 331 | if (_console != NULL) |
hogejun | 0:89c6aae3a486 | 332 | _console->printf(": "); |
hogejun | 0:89c6aae3a486 | 333 | } |
hogejun | 0:89c6aae3a486 | 334 | printByte(*p++); |
hogejun | 0:89c6aae3a486 | 335 | i++; |
hogejun | 0:89c6aae3a486 | 336 | } |
hogejun | 2:b8b33621e7fe | 337 | if (_console != NULL) |
hogejun | 0:89c6aae3a486 | 338 | _console->printf("\n"); |
hogejun | 0:89c6aae3a486 | 339 | } |