MCPcopy Create free account
hub / github.com/DISTORTEC/distortos / decodeCsd

Function decodeCsd

source/devices/memory/SdCardSpiBased.cpp:318–357  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

316 */
317
318Csd decodeCsd(const std::array<uint8_t, 16>& buffer)
319{
320 Csd csd {};
321 csd.csdStructure = extractBits(ConstUint8Range{buffer}, 126, 2);
322 csd.taac = extractBits(ConstUint8Range{buffer}, 112, 8);
323 csd.nsac = extractBits(ConstUint8Range{buffer}, 104, 8);
324 csd.tranSpeed = extractBits(ConstUint8Range{buffer}, 96, 8);
325 csd.ccc = extractBits(ConstUint8Range{buffer}, 84, 12);
326 csd.readBlLen = extractBits(ConstUint8Range{buffer}, 80, 4);
327 csd.readBlPartial = extractBits(ConstUint8Range{buffer}, 79, 1);
328 csd.writeBlkMisalign = extractBits(ConstUint8Range{buffer}, 78, 1);
329 csd.readBlkMisalign = extractBits(ConstUint8Range{buffer}, 77, 1);
330 csd.dsrImp = extractBits(ConstUint8Range{buffer}, 76, 1);
331
332 if (csd.csdStructure == 0)
333 {
334 csd.csdV1.cSize = extractBits(ConstUint8Range{buffer}, 62, 12);
335 csd.csdV1.vddRCurrMin = extractBits(ConstUint8Range{buffer}, 59, 3);
336 csd.csdV1.vddRCurrMax = extractBits(ConstUint8Range{buffer}, 56, 3);
337 csd.csdV1.vddWCurrMin = extractBits(ConstUint8Range{buffer}, 53, 3);
338 csd.csdV1.vddWCurrMax = extractBits(ConstUint8Range{buffer}, 50, 3);
339 csd.csdV1.cSizeMult = extractBits(ConstUint8Range{buffer}, 47, 3);
340 }
341 else if (csd.csdStructure == 1)
342 csd.csdV2.cSize = extractBits(ConstUint8Range{buffer}, 48, 22);
343
344 csd.eraseBlkEn = extractBits(ConstUint8Range{buffer}, 46, 1);
345 csd.sectorSize = extractBits(ConstUint8Range{buffer}, 39, 7);
346 csd.wpGrpSize = extractBits(ConstUint8Range{buffer}, 32, 7);
347 csd.wpGrpEnable = extractBits(ConstUint8Range{buffer}, 31, 1);
348 csd.r2wFactor = extractBits(ConstUint8Range{buffer}, 26, 3);
349 csd.writeBlLen = extractBits(ConstUint8Range{buffer}, 22, 4);
350 csd.writeBlPartial = extractBits(ConstUint8Range{buffer}, 21, 1);
351 csd.fileFormatGrp = extractBits(ConstUint8Range{buffer}, 15, 1);
352 csd.copy = extractBits(ConstUint8Range{buffer}, 14, 1);
353 csd.permWriteProtect = extractBits(ConstUint8Range{buffer}, 13, 1);
354 csd.tmpWriteProtect = extractBits(ConstUint8Range{buffer}, 12, 1);
355 csd.fileFormat = extractBits(ConstUint8Range{buffer}, 10, 2);
356 return csd;
357}
358
359/**
360 * \brief Decodes raw data into SD Status.

Callers 1

initializeMethod · 0.85

Calls 1

extractBitsFunction · 0.85

Tested by

no test coverage detected