📄 write_idblock.c
字号:
ld b, 0x08 ; bit counter
crcloop:
push bc ; save bit counter
ld a, h
xor d
scf
ccf ; clear carry bit
rl de ; roll crc left one bit
ex de, hl
scf
ccf ; clear carry bit
rl de ; roll data left one bit
ex de, hl
bit 7, a ; result from earlier XOR
jr z, bit7iszero
bit7isone:
ld bc, CRC_POLY ; recommended 16-bit polynomial (X.25)
ld a, e
xor c
ld e, a
ld a, d ; XOR crc with polynomial
xor b
ld d, a
bit7iszero:
pop bc ; restore bit counter
djnz crcloop
pop af
pop bc
ret
#endasm
struct _FlashDescription {
int fType;
char *fDesc;
};
const struct _FlashDescription FlashDesc[] = {
{1, "small sector, sector erase (0x30) byte write"},
{2, "small sector, sector write"},
{3, "small page, page erase (0x50) byte write"},
{4, "small sector, sector erase (0x20) byte write"},
{0x11, "large sector (128/96/8/8/16), sector erase (0x30) byte write"},
{0x12, "large sector (16/8/8/96/128), sector erase (0x30) byte write"},
{0x13, "large sector (16*7/4/4/8), sector erase (0x30) byte write"},
{0x14, "large sector (8/4/4/16*7), sector erase (0x30) byte write"},
{0x15, "large sector (64*3/32/8/8/16), sector erase (0x30) byte write"},
{0x16, "large sector (16/8/8/32/64*3), sector erase (0x30) byte write"},
{0x17, "large sector (64*7/32/8/8/16), sector erase (0x30) byte write"},
{0x18, "large sector (16/8/8/32/64*7), sector erase (0x30) byte write"},
{0x19, "large sector (64*8), sector erase (0x30) byte write"},
{0x1A, "large sector (64*8), sector erase (0x30) byte write"},
{0x1B, "large sector (64*4), sector erase (0x30) byte write"},
{0x1C, "large sector (64*4), sector erase (0x30) byte write"},
{0x1D, "large sector (128/96/8/8), sector erase (0x30) byte write"},
{0x1E, "large sector (32*8), sector erase (0x30) byte write"},
{0x1F, "large sector (8/4/4/16*7), sector erase (0x30) byte write"},
{0x20, "large sector (16*8), sector erase (0x30) byte write"},
{0x21, "large sector (16*8), sector erase (0x30) byte write"},
{0, "unknown.\n If valid, a description should be added herein"}
};
struct _Flash {
int fID;
char *name;
};
const struct _Flash Flash[] = {
{0x0134, "n AMD AM29F002BB"},
{0x0140, "n AMD AM29LV002BT"},
{0x016D, "n AMD AM29LV001BB"},
{0x0177, "n AMD AM29F004BT"},
{0x017B, "n AMD AM29F004BB"},
{0x01A4, "n AMD AM29F040B"},
{0x01B0, "n AMD AM29F002BT"},
{0x01B5, "n AMD AM29LV004BT"},
{0x01B6, "n AMD AM29LV004BB"},
{0x01C2, "n AMD AM29LV002BB"},
{0x01ED, "n AMD AM29LV001BT"},
{0x0434, " Fujitsu MBM29F002BC"},
{0x04B0, " Fujitsu MBM29F002TC"},
{0x1F07, "n Atmel AT49F002"},
{0x1F08, "n Atmel AT49F002T"},
{0x1F25, "n Atmel AT29C1024"},
{0x1F26, "n Atmel AT29LV1024"},
{0x1F35, "n Atmel AT29LV010 / AT29BV010A"},
{0x1FA4, "n Atmel AT29C040"},
{0x1FBA, "n Atmel AT29LV020 / AT29BV020"},
{0x1FC4, "n Atmel AT29LV040 / AT29BV040"},
{0x1FD5, "n Atmel AT29C010"},
{0x1FDA, "n Atmel AT29C020"},
{0x2023, " STMicroelectronics M29W010B"},
{0x20E2, " STMicroelectronics M29F040B"},
{0x20E3, " STMicroelectronics M29W040B"},
{0x4001, " Mosel/Vitelic V29C51001T"},
{0x4002, " Mosel/Vitelic V29C51002T"},
{0x4003, " Mosel/Vitelic V29C51004T"},
{0x4060, " Mosel/Vitelic V29LC51001"},
{0x4063, " Mosel/Vitelic V29C31004T"},
{0x4073, " Mosel/Vitelic V29C31004B"},
{0x4082, " Mosel/Vitelic V29LC51002"},
{0x40A1, " Mosel/Vitelic V29C51001B"},
{0x40A2, " Mosel/Vitelic V29C51002B"},
{0x40A3, " Mosel/Vitelic V29C51004B"},
{0xAD34, " Hyundai HY29F002B"},
{0xADB0, " Hynix/Hyundai HY29F002T"},
{0xBF07, " SST SST29EE010"},
{0xBF08, " SST SST29LE010 / SST29VE010"},
{0xBF10, " SST SST29EE020"},
{0xBF12, " SST SST29LE020 / SST29VE020"},
{0xBF13, " SST SST29SF040"},
{0xBF14, " SST SST29VF040"},
{0xBF20, " SST SST29SF512"},
{0xBF21, " SST SST29VF512"},
{0xBF22, " SST SST29SF010"},
{0xBF23, " SST SST29VF010"},
{0xBF24, " SST SST29SF020"},
{0xBF25, " SST SST29VF020"},
{0xBF3D, " SST SST29LE512 / SST29VE512"},
{0xBF5D, " SST SST29EE512"},
{0xBFB4, " SST SST39SF512"},
{0xBFB5, " SST SST39SF010"},
{0xBFB6, " SST SST39SF020"},
{0xBFB7, " SST SST39SF040"},
{0xBFD4, " SST SST39LF512 / SST39VF512"},
{0xBFD5, " SST SST39LF010 / SST39VF010"},
{0xBFD6, " SST SST39LF020 / SST39VF020"},
{0xBFD7, " SST SST39LF040 / SST39VF040"},
{0xC234, " Macronix MX29F002B"},
{0xC2B0, " Macronix MX29F02T"},
{0xDA45, " Winbond W29C020CT"},
{0xDA46, " Winbond W29C040"},
{0xDAB5, " Winbond W39L020"},
{0xDAC1, " Winbond W29EE011"},
{0, "n unlisted type.\n If valid, a description should be added herein"}
};
void PrintFlashDescription(char *which, int FlashID, int FlashType)
{
int i;
i = 0;
while (Flash[i].fID) {
if (Flash[i].fID == FlashID) {
break;
}
i++;
}
printf("\n\n%s 0x%04X is a%s.\n", which, FlashID, Flash[i].name);
i = 0;
while (FlashDesc[i].fType) {
if (FlashDesc[i].fType == FlashType) {
break;
}
i++;
}
printf(" Type 0x%04X is %s.\n", FlashType, FlashDesc[i].fDesc);
}
struct _Product {
int pID;
char *name;
char *description;
};
const struct _Product Product[] = {
//*** RabbitCore Modules ***//
{RCM2000, " RCM2000", "25MHz R2000, 256K flash, 512k SRAM"},
{RCM2010, " RCM2010", "25MHz R2000, 256K flash, 128k SRAM"},
{RCM2020, " RCM2020", "18MHz R2000, 256K flash, 128K SRAM"},
{RCM2100, " RCM2100", "22MHz R2000, 2x256K flash, 512K SRAM, ethernet"},
{RCM2110, " RCM2110", "22MHz R2000, 256K flash, 128K SRAM, ethernet"},
{RCM2115, " RCM2115",
"22MHz R2000, 256K flash, 128K SRAM, ethernet (no RJ45)"},
{RCM2120, " RCM2120", "22MHz R2000, 2x256K flash, 512K SRAM"},
{RCM2130, " RCM2130", "22MHz R2000, 256K flash, 128K SRAM"},
{RCM2200, " RCM2200", "22MHz R2000, 256K flash, 128K SRAM, ethernet"},
{RCM2210, " RCM2210",
"22MHz R2000, 256K flash, 128K SRAM, ethernet (no RJ45)"},
{RCM2250, " RCM2250", "22MHz R2000, 2x256K flash, 512K SRAM, ethernet"},
{RCM2300, " RCM2300", "22MHz R2000, 256K flash, 128K SRAM"},
{RCM3000, " RCM3000", "29MHz R3000, 2x256K flash, 512K SRAM, ethernet"},
{RCM3010, " RCM3010", "29MHz R3000, 256K flash, 128K SRAM, ethernet"},
{RCM3100, " RCM3100", "29MHz R3000, 2x256K flash, 512K SRAM"},
{RCM3110, " RCM3110", "29MHz R3000, 256K flash, 128K SRAM"},
{RCM3200, " RCM3200", "44MHz R3000, 512K flash, 256K+512K SRAM, ethernet"},
{RCM3210A, " RCM3210A", "29MHz R3000, 256K flash, 128K SRAM, ethernet"},
{RCM3220A, " RCM3220A", "44MHz R3000, 512K flash, 256K+512K SRAM"},
{RCM3300A, " RCM3300A",
"44MHz R3000, 512K flash, 512K+512K SRAM, ethernet, 8M serial flash"},
{RCM3310A, " RCM3310A",
"44MHz R3000, 512K flash, 512K+512K SRAM, ethernet, 4M serial flash"},
{RCM3400A, " RCM3400A",
"29MHz R3000, 512K flash, 512K SRAM, ethernet on PB, analog"},
{RCM3410A, " RCM3410A",
"29MHz R3000, 256K flash, 256K SRAM, ethernet on PB, analog"},
//TinyCore
{RCM3600A, " RCM3600A", "22MHz R3000, 512K flash, 512K SRAM"},
{RCM3610A, " RCM3610A", "22MHz R3000, 256K flash, 128K SRAM"},
// Hobby
{RCM3600H, " RCM3600H", "22MHz R3000, 512K flash, 512K SRAM"},
{RCM3610H, " RCM3610H", "22MHz R3000, 256K flash, 128K SRAM"},
//Ethernet TinyCore
{RCM3700A, " RCM3700A",
"22MHz R3000, 512K flash, 512K SRAM, ethernet, 1M serial flash"},
{RCM3710A, " RCM3710A",
"22MHz R3000, 256K flash, 128K SRAM, ethernet, 1M serial flash"},
//Hobby Ethernet
{RCM3700H, " RCM3700H",
"22MHz R3000, 512K flash, 512K SRAM, ethernet, 1M serial flash"},
{RCM3710H, " RCM3710H",
"22MHz R3000, 256K flash, 128K SRAM, ethernet, 1M serial flash"},
//*** Single Board Computers ***//
//Jackrabbit
{BL1800, " BL1800", "29MHz R2000, 256K flash, 128K SRAM, RS485, battery"},
{BL1805, " BL1805", "29MHz R2000, 256K flash, 512K SRAM, RS485, battery"},
{BL1810, " BL1810", "14MHz R2000, 128K flash, 128K SRAM, RS485, battery"},
{BL1820, " BL1820", "14MHz R2000, 128K flash, 128k SRAM"},
//Wildcat
{BL2000, " BL2000",
"22MHz R2000, 256K flash, 128K SRAM, ethernet, high-quality analog"},
{BL2000B, " BL2000B",
"22MHz R2000, 512K flash, 512K SRAM, ethernet, high-quality analog"},
{BL2010, " BL2010", "22MHz R2000, 256K flash, 128K SRAM, ethernet, analog"},
{BL2010B, " BL2010B",
"22MHz R2000, 256K flash, 512K SRAM, ethernet, analog"},
{BL2020, " BL2020",
"22MHz R2000, 256K flash, 128K SRAM, high-quality analog"},
{BL2030, " BL2030", "22MHz R2000, 256K flash, 128K SRAM, analog"},
{BL2040, " BL2040", "22MHz R2000, 256K flash, 128K SRAM"},
//Smart Cat
{BL2100, " BL2100",
"22MHz RCM2200, 256K flash, 128K SRAM, ethernet, analog"},
{BL2101, " BL2101",
"22MHz RCM2200, 256K flash, 128K SRAM, ethernet, 10V analog"},
{BL2105, " BL2105",
"22MHz RCM2250, 2x256K flash, 512K SRAM, ethernet, analog"},
{BL2110, " BL2110", "22MHz RCM2200, 256K flash, 128K SRAM, ethernet"},
{BL2111, " BL2111",
"22MHz RCM2250, 2x256K flash, 512K SRAM, ethernet, 10V analog"},
{BL2115, " BL2115", "22MHz RCM2250, 2x256K flash, 512K SRAM, ethernet"},
{BL2120, " BL2120", "22MHz RCM2300, 256K flash, 128K SRAM, analog"},
{BL2121, " BL2121", "22MHz RCM2300, 256K flash, 128K SRAM, 10V analog"},
{BL2130, " BL2130", "22MHz RCM2300, 256K flash, 128K SRAM"},
//RabbitNet
{BL2500A, " BL2500A", "29MHz RCM3010, 256K flash, 128K SRAM, ethernet"},
{BL2500B, " BL2500B", "29MHz RCM3000, 2x256K flash, 512K SRAM, ethernet"},
{BL2500C, " BL2500C", "44MHz RCM3200, 512K flash, 256K+512K SRAM, ethernet"},
{BL2510A, " BL2510A", "29MHz RCM3110, 256K flash, 128K SRAM"},
{BL2510B, " BL2510B", "29MHz RCM3100, 2x256K flash, 512K SRAM"},
{BL2600A, " BL2600A", "44MHz RCM3200, 512K flash, 256K+512K SRAM, ethernet"},
{BL2600B, " BL2600B", "29MHz RCM3000, 2x256K flash, 512K SRAM, ethernet"},
{BL2600C, " BL2600C", "29MHz RCM3010, 256K flash, 128K SRAM, ethernet"},
{BL2610A, " BL2610A", "29MHz RCM3100, 2x256K flash, 512K SRAM"},
{BL2610B, " BL2610B", "29MHz RCM3110, 256K flash, 128K SRAM"},
//Fox Low-Power Controller
{LP3500, " LP3500", "7MHz R3000, 2x256K flash, 512K SRAM, analog, relay"},
{LP3510, " LP3510", "7MHz R3000, 256K flash, 128K SRAM"},
//*** Embedded Control Systems ***//
//SmartStar
{SR9100, " SR9100", "29MHz R2000, 2x256K flash, 128K SRAM"},
//MiniStar
{SR9150, " SR9150", "22MHz R2000, 2x256K flash, 128K SRAM, ethernet"},
{SR9160, " SR9160", "22MHz R2000, 2x256K flash, 128K SRAM"},
//*** Operator Interfaces ***//
//Intellicom
{OP6600, "n OP6600", "18MHz R2000, 256K flash, 128K SRAM"},
{OP6700, "n OP6700", "18MHz R2000, 2x256K flash, 256K SRAM, ethernet"},
//Minicom
{OP6800, "n OP6800", "22MHz RCM2200, 256K flash, 128K SRAM, ethernet"},
{OP6805, "n OP6805", "22MHz RCM2250, 2x256K flash, 512K SRAM, ethernet"},
{OP6810, "n OP6810", "22MHz RCM2300, 256K flash, 128K SRAM"},
//eDisplay
{OP7200, "n OP7200",
"22MHz RCM2200, 256K flash, 128K SRAM, ethernet, analog, touchscreen"},
{OP7200B, "n OP7200B",
"22MHZ RCM2250, 2x256K flash, 512K SRAM, ethernet, analog, touchscreen"},
{OP7210, "n OP7210", "22MHz RCM2300, 256K flash, 128K SRAM"},
{OP7210B, "n OP7210B", "22MHz RCM2250, 2x256K flash, 512K SRAM, ethernet"},
//*** Other Products ***//
//Ethernet Modem
{EM1500A, "n EM1500A",
"44MHz RCM3200, 512K flash, 256K+512K SRAM, ethernet"},
//RabbitLink
{EG2110A, "n EG2110A", "22MHz R2000, 2x256K flash, 128K SRAM, ethernet, 3V"},
{RABLINK, " RABLINK", "22MHz R2000, 2x256K flash, 128K SRAM, ethernet"},
//TCP/IP Development Kit
{RTDK, " RTDK", "18MHz R2000, 2x256K flash, 128K SRAM, ethernet"},
{0, "n unlisted type", "If valid, a description should be added herein"}
};
void PrintProductDescription(int ProductID)
{
int i;
i = 0;
while (Product[i].pID) {
if (Product[i].pID == ProductID) {
break;
}
i++;
}
printf("\n\nProduct ID 0x%04X is a%s.\n", ProductID, Product[i].name);
printf(" %s.\n", Product[i].description);
}
void PrintSysIDBlockInfo(void)
{
printf("\n\nSystem ID Block content:\n\n");
printf(" tableVersion = %d\n", SysIDBlock.tableVersion);
printf(" productID = 0x%04X\n", SysIDBlock.productID);
printf(" vendorID = %d\n", SysIDBlock.vendorID);
printf(" timestamp = %02d/%02d/%02d%02d %02d:%02d:%02d\n\n",
SysIDBlock.timestamp[2], SysIDBlock.timestamp[3],
SysIDBlock.timestamp[0], SysIDBlock.timestamp[1],
SysIDBlock.timestamp[4], SysIDBlock.timestamp[5],
SysIDBlock.timestamp[6]);
printf(" flashID = 0x%08LX\n", SysIDBlock.flashID);
printf(" flashType = 0x%04X\n", SysIDBlock.flashType);
printf(" flashSize = %d Kbytes\n", SysIDBlock.flashSize * 4);
printf(" sectorSize = %d bytes\n", SysIDBlock.sectorSize);
printf(" numSectors = %d\n", SysIDBlock.numSectors);
printf(" flashSpeed = %d nS\n\n", SysIDBlock.flashSpeed);
printf(" flash2ID = 0x%08LX\n", SysIDBlock.flash2ID);
printf(" flash2Type = 0x%04X\n", SysIDBlock.flash2Type);
printf(" flash2Size = %d Kbytes\n", SysIDBlock.flash2Size * 4);
printf(" sector2Size = %d bytes\n", SysIDBlock.sector2Size);
printf(" num2Sectors = %d\n", SysIDBlock.num2Sectors);
printf(" flash2Speed = %d nS\n\n", SysIDBlock.flash2Speed);
printf(" ramID = 0x%08LX\n", SysIDBlock.ramID);
printf(" ramSize = %d Kbytes\n", SysIDBlock.ramSize * 4);
printf(" ramSpeed = %d nS\n\n", SysIDBlock.ramSpeed);
printf(" cpuID = R%u (rev. %u)\n",
((SysIDBlock.cpuID >> 8) & 0xFF) * 1000 + 2000,
SysIDBlock.cpuID & 0xFF);
printf(" crystalFreq = %.4f MHz\n\n", SysIDBlock.crystalFreq * 1.0e-6);
printf(" macAddr = %02X:%02X:%02X:%02X:%02X:%02X\n",
SysIDBlock.macAddr[0], SysIDBlock.macAddr[1], SysIDBlock.macAddr[2],
SysIDBlock.macAddr[3], SysIDBlock.macAddr[4], SysIDBlock.macAddr[5]);
printf(" serialNumber = '%s'\n", SysIDBlock.serialNumber);
printf(" productName = '%s'\n\n", SysIDBlock.productName);
printf(" reserved = 0x%02X\n\n", SysIDBlock.reserved[0]);
printf(" idBlockSize = 0x%08LX bytes\n", SysIDBlock.idBlockSize);
printf(" userBlockSize = 0x%04X\n", SysIDBlock.userBlockSize);
printf(" userBlockLoc = 0x%04X\n\n", SysIDBlock.userBlockLoc);
printf(" idBlockCRC = 0x%04X\n", SysIDBlock.idBlockCRC);
printf(" marker = %02X %02X %02X %02X %02X %02X\n",
SysIDBlock.marker[0], SysIDBlock.marker[1], SysIDBlock.marker[2],
SysIDBlock.marker[3], SysIDBlock.marker[4], SysIDBlock.marker[5]);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -