Files
drivers/sdcard/cid.go
T
2021-05-23 11:22:42 +02:00

50 lines
1.3 KiB
Go

package sdcard
import "fmt"
type CID struct {
//// byte 0
ManufacturerID byte
//uint8_t mid; // Manufacturer ID
//// byte 1-2
OEMApplicationID uint16
//char oid[2]; // OEM/Application ID
//// byte 3-7
ProductName string
//char pnm[5]; // Product name
//// byte 8
ProductVersion string
//unsigned prv_m : 4; // Product revision n.m
//unsigned prv_n : 4;
//// byte 9-12
ProductSerialNumber uint32
//uint32_t psn; // Product serial number
//// byte 13
ManufacturingYear byte
ManufacturingMonth byte
//unsigned mdt_year_high : 4; // Manufacturing date
//unsigned reserved : 4;
//// byte 14
//unsigned mdt_month : 4;
//unsigned mdt_year_low : 4;
//// byte 15
Always1 byte
//unsigned always1 : 1;
CRC byte
//unsigned crc : 7;
}
func NewCID(buf []byte) *CID {
return &CID{
ManufacturerID: buf[0],
OEMApplicationID: (uint16(buf[0]) << 8) | uint16(buf[1]),
ProductName: string(buf[3:8]),
ProductVersion: fmt.Sprintf("%d.%d", (buf[8]&0xF0)>>4, buf[8]&0x0F),
ProductSerialNumber: (uint32(buf[9]) << 24) | (uint32(buf[10]) << 16) | (uint32(buf[11]) << 8) | uint32(buf[12]),
ManufacturingYear: (buf[13] & 0xF0) | (buf[14] & 0x0F),
ManufacturingMonth: (buf[14] & 0xF0) >> 4,
Always1: (buf[15] & 0x80) >> 7,
CRC: buf[15] & 0x7F,
}
}