mirror of
https://github.com/RfidResearchGroup/proxmark3.git
synced 2025-02-26 00:55:19 +08:00
standardize flash uniqueID to big-endian
This commit is contained in:
parent
48ca513a96
commit
229454963b
3 changed files with 34 additions and 31 deletions
|
@ -49,9 +49,9 @@ void FlashmemSetSpiBaudrate(uint32_t baudrate) {
|
|||
}
|
||||
|
||||
// read ID out
|
||||
uint8_t Flash_ReadID(void) {
|
||||
bool Flash_ReadID_90(flash_device_type_90_t* result) {
|
||||
|
||||
if (Flash_CheckBusy(BUSY_TIMEOUT)) return 0;
|
||||
if (Flash_CheckBusy(BUSY_TIMEOUT)) return false;
|
||||
|
||||
// Manufacture ID / device ID
|
||||
FlashSendByte(ID);
|
||||
|
@ -59,15 +59,10 @@ uint8_t Flash_ReadID(void) {
|
|||
FlashSendByte(0x00);
|
||||
FlashSendByte(0x00);
|
||||
|
||||
uint8_t man_id = FlashSendByte(0xFF);
|
||||
uint8_t dev_id = FlashSendLastByte(0xFF);
|
||||
result->manufacturer_id = FlashSendByte(0xFF);
|
||||
result->device_id = FlashSendLastByte(0xFF);
|
||||
|
||||
if (g_dbglevel > 3) Dbprintf("Flash ReadID | Man ID %02x | Device ID %02x", man_id, dev_id);
|
||||
|
||||
if ((man_id == WINBOND_MANID) && (dev_id == WINBOND_DEVID))
|
||||
return dev_id;
|
||||
|
||||
return 0;
|
||||
return true;
|
||||
}
|
||||
|
||||
uint16_t Flash_ReadData(uint32_t address, uint8_t *out, uint16_t len) {
|
||||
|
@ -349,29 +344,32 @@ void Flashmem_print_status(void) {
|
|||
}
|
||||
DbpString(" Init.................... " _GREEN_("OK"));
|
||||
|
||||
uint8_t dev_id = Flash_ReadID();
|
||||
switch (dev_id) {
|
||||
case 0x11 :
|
||||
DbpString(" Memory size............. " _YELLOW_("2 mbits / 256 kb"));
|
||||
break;
|
||||
case 0x10 :
|
||||
DbpString(" Memory size..... ....... " _YELLOW_("1 mbits / 128 kb"));
|
||||
break;
|
||||
case 0x05 :
|
||||
DbpString(" Memory size............. " _YELLOW_("512 kbits / 64 kb"));
|
||||
break;
|
||||
default :
|
||||
DbpString(" Device ID............... " _YELLOW_(" --> Unknown <--"));
|
||||
break;
|
||||
// NOTE: It would likely be more useful to use JDEC ID command 9F,
|
||||
// as it provides a third byte indicative of capacity.
|
||||
flash_device_type_90_t device_type = {0};
|
||||
if (!Flash_ReadID_90(&device_type)) {
|
||||
DbpString(" Device ID............... " _RED_(" --> Not Found <--"));
|
||||
} else {
|
||||
if ((device_type.manufacturer_id == WINBOND_MANID) && (device_type.device_id == WINBOND_DEVID)) {
|
||||
DbpString(" Memory size............. " _GREEN_("2 mbits / 256 kb"));
|
||||
} else {
|
||||
Dbprintf(" Device ID............... " _YELLOW_("%02X / %02X (unknown)"),
|
||||
device_type.manufacturer_id, device_type.device_id );
|
||||
}
|
||||
}
|
||||
|
||||
uint8_t uid[8] = {0, 0, 0, 0, 0, 0, 0, 0};
|
||||
Flash_UniqueID(uid);
|
||||
Dbprintf(" Unique ID............... " _YELLOW_("0x%02X%02X%02X%02X%02X%02X%02X%02X"),
|
||||
uid[7], uid[6], uid[5], uid[4],
|
||||
uid[3], uid[2], uid[1], uid[0]
|
||||
Dbprintf(" Unique ID (be).......... " _YELLOW_("0x%02X%02X%02X%02X%02X%02X%02X%02X" ),
|
||||
uid[0], uid[1], uid[2], uid[3],
|
||||
uid[4], uid[5], uid[6], uid[7]
|
||||
);
|
||||
|
||||
if (g_dbglevel > 3) {
|
||||
Dbprintf(" Unique ID (le).......... " _YELLOW_("0x%02X%02X%02X%02X%02X%02X%02X%02X" ),
|
||||
uid[7], uid[6], uid[5], uid[4],
|
||||
uid[3], uid[2], uid[1], uid[0]
|
||||
);
|
||||
}
|
||||
FlashStop();
|
||||
}
|
||||
|
||||
|
|
|
@ -123,7 +123,12 @@ bool Flash_Erase4k(uint8_t block, uint8_t sector);
|
|||
//bool Flash_Erase32k(uint32_t address);
|
||||
bool Flash_Erase64k(uint8_t block);
|
||||
|
||||
uint8_t Flash_ReadID(void);
|
||||
typedef struct {
|
||||
uint8_t manufacturer_id;
|
||||
uint8_t device_id;
|
||||
} flash_device_type_90_t; // to differentiate from JDEC ID via cmd 9F
|
||||
bool Flash_ReadID_90(flash_device_type_90_t* result);
|
||||
|
||||
uint16_t Flash_ReadData(uint32_t address, uint8_t *out, uint16_t len);
|
||||
uint16_t Flash_ReadDataCont(uint32_t address, uint8_t *out, uint16_t len);
|
||||
uint16_t Flash_Write(uint32_t address, uint8_t *in, uint16_t len);
|
||||
|
|
|
@ -413,8 +413,8 @@ void usb_update_serial(uint64_t newSerialNumber) {
|
|||
uint8_t nibble2 = (newSerialNumber >> ((8 * i) + 0)) & 0xFu; // bitmasks [0x0F, 0x0F00, 0x0F0000, ... 0x0F00000000000000]
|
||||
char c1 = nibble1 < 10 ? '0' + nibble1 : 'A' + (nibble1 - 10);
|
||||
char c2 = nibble2 < 10 ? '0' + nibble2 : 'A' + (nibble2 - 10);
|
||||
StrSerialNumber[46 - (4 * i)] = c1; // [ 46, 42, .., 22, 18 ]
|
||||
StrSerialNumber[48 - (4 * i)] = c2; // [ 48, 44, .., 24, 20 ]
|
||||
StrSerialNumber[18 + (4*i) + 0] = c1; // [ 18, 22, .., 42, 46 ]
|
||||
StrSerialNumber[18 + (4*i) + 2] = c2; // [ 20, 24, .., 44, 48 ]
|
||||
}
|
||||
StrSerialNumber[0] = USB_STRING_DESCRIPTOR_SERIAL_NUMBER_LENGTH;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue