+ LOG_INFO("VERSION: %d.0\n", csd->structure ? 2 : 1);
+ LOG_INFO("CARD COMMAND CLASS: %d\n", csd->ccc);
+ LOG_INFO("MAX DATA RATE: %ld\n", csd->max_data_rate);
+ LOG_INFO("WRITE BLK LEN BITS: %ld\n", csd->write_blk_bits);
+ LOG_INFO("READ BLK LEN BITS: %ld\n", csd->read_blk_bits);
+ LOG_INFO("ERASE SIZE: %ld\n", csd->erase_size);
+ LOG_INFO("BLK NUM: %ld\n", csd->block_num);
+ LOG_INFO("BLK LEN: %ld\n", csd->block_len);
+ LOG_INFO("CAPACITY %ld\n", csd->capacity);
+ LOG_INFO("FLAG Write: WP %d, W MISALIGN %d\n", csd->write_partial, csd->write_misalign);
+ LOG_INFO("FLAG Read: RP %d, R MISALIGN %d\n", csd->read_partial, csd->read_misalign);
+
+}
+
+void sd_dumpCid(SdCID *cid)
+{
+ ASSERT(cid);
+
+ LOG_INFO("MANFID: %d\n", cid->manfid);
+ LOG_INFO("OEMID: %d\n", cid->oemid);
+ LOG_INFO("SERIAL: %ld\n", cid->serial);
+ LOG_INFO("PROD_NAME: %s\n", cid->prod_name);
+ LOG_INFO("REV: %d.%d\n", cid->m_rev, cid->l_rev);
+ LOG_INFO("OFF,Y,M: %lx, %ld %ld\n", cid->year_off, (BCD_TO_INT_32BIT(cid->year_off) / 12) + 2000,
+ (BCD_TO_INT_32BIT(cid->year_off) % 12));
+}
+
+void sd_dumpSsr(SdSSR *ssr)
+{
+ ASSERT(ssr);
+
+ LOG_INFO("BUS_WIDTH: %d\n", ssr->bus_width);
+ LOG_INFO("TYPE: %d\n", ssr->card_type);
+ LOG_INFO("AU_TYPE: %d\n", ssr->au_size);
+ LOG_INFO("ERASE_SIZE: %d\n", ssr->erase_size);
+ LOG_INFO("SPEED_CLASS: %d\n", ssr->speed_class);
+}
+
+
+static int sd_decodeCsd(SdCSD *csd, uint32_t *resp, size_t len)