⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 write_idblock.c

📁 用于Rabbit写Flash设备ID的程序
💻 C
📖 第 1 页 / 共 4 页
字号:

	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 + -