class Program
{
static void Main(string[] args)
{
foreach (SDCard sd in SDCard.GetSDCards())
{
Console.Write("{0} {1}\n", sd.PhysicalDrivePath, sd.DriveInfo.RootDirectory.ToString());
sd.RefreshData();
StringBuilder sb = new StringBuilder();
sb.AppendLine("--------------------");
sb.AppendLine("Raw CID Bytes: " + BitConverter.ToString(sd.CID.RawCidBytes));
sb.AppendLine("--------------------");
sb.AppendLine("Manufacturer ID: " + Convert.ToString(sd.CID.ManufacturerId, 16));
sb.AppendLine("OEM ID: " + sd.CID.OemId);
sb.AppendLine("Product Name: " + sd.CID.ProductName);
sb.AppendLine("Product Revision: " + sd.CID.ProductRevision);
sb.AppendLine("Product Serial Number: " + Convert.ToString(sd.CID.SerialNumber, 16).PadLeft(8, '0'));
sb.AppendLine("Manufacture Date: " + sd.CID.ManufactureDate);
sb.AppendLine("--------------------");
sb.AppendLine("Raw CSD Bytes: " + BitConverter.ToString(sd.CSD.RawCsdBytes));
sb.AppendLine("--------------------");
sb.AppendLine("CSD Version 2 bit value: " + sd.CSD.CsdVersion.ToString());
sb.AppendLine("Data Read Access Time 1 (TAAC): " + sd.CSD.Taac);
sb.AppendLine("Data Read Access Time 2 (NSAC): " + sd.CSD.Nsac);
sb.AppendLine("Max Data Transfer Rate: " + sd.CSD.TranSpeed);
sb.AppendLine("Card Command Classes: " + Convert.ToString(sd.CSD.CCC, 2).PadLeft(12, '0'));
sb.AppendLine("Max Read Data Block Length: " + sd.CSD.ReadBlLen);
sb.AppendLine("Partial Blocks For Read Allowed: " + sd.CSD.ReadBlPartial);
sb.AppendLine("Write Block Misalignment: " + sd.CSD.WriteBlkMisalign);
sb.AppendLine("Read Block Misalignment: " + sd.CSD.ReadBlkMisalign);
sb.AppendLine("DSR Implemented: " + sd.CSD.DsrImp);
sb.AppendLine("Device Size: " + sd.CSD.CSize);
sb.AppendLine("Max Read Current @ VDD Min: " + sd.CSD.VddRCurrMin);
sb.AppendLine("Max Read Current @ VDD Max: " + sd.CSD.VddRCurrMax);
sb.AppendLine("Max Write Current @ VDD Min: " + sd.CSD.VddWCurrMin);
sb.AppendLine("Max Write Current @ VDD Max: " + sd.CSD.VddWCurrMax);
sb.AppendLine("Device Size Multiplier: " + sd.CSD.CSizeMult);
sb.AppendLine("Erase Single Block Enable: " + sd.CSD.EraseBlkEn);
sb.AppendLine("Erase Sector Size: " + sd.CSD.SectorSize);
sb.AppendLine("Write Protect Group Size: " + sd.CSD.WpGrpSize);
sb.AppendLine("Write Protect Group Enable: " + sd.CSD.WpGrpEnable);
sb.AppendLine("Write Speed Factor: " + sd.CSD.R2WFactor);
sb.AppendLine("Max Write Data Block Length: 2^" + sd.CSD.WriteBlLen);
sb.AppendLine("Partial Blocks For Write Allowed: " + sd.CSD.WriteBlPartial);
sb.AppendLine("File Format Group: " + sd.CSD.FileFormatGrp);
sb.AppendLine("Copy Flag (OTP): " + sd.CSD.Copy);
sb.AppendLine("Permanent Write Protection: " + sd.CSD.PermWriteProtect);
sb.AppendLine("Temporary Write Protection: " + sd.CSD.TmpWriteProtect);
sb.AppendLine("File Format: " + sd.CSD.FileFormat);
Console.WriteLine(sb.ToString());
}
Console.ReadKey();
}
}
}