"Tilmann Reh" ...
I think not, but the Atmel is definitely ISP capable using the same HEX
style protocol (which is fully documented, BTW). As mentioned by Rich,
Atmel provides a tool named FLIP for doing ISP.
That must have been a bug somewhere. We used the Temic RD2 and now the
Atmel ED2, both with our own IAP loader, and never noticed anything like
that.
However, I think Atmel and NXP versions could indeed be slightly
different - additionally, the T89C51RD2 (notice that the first "A" ist
missing) previously made by Temic (who were taken over by Atmel) is
different in many details from the AT89C51RD2 later made by Atmel.
The older Temic part had an additional 2k EEPROM, while the Philips hat
not. Maybe Atmel changed their nomenclature to be more compatible. Now
their (current) RD2 is functionally equivalent to the (current) RD2 from
NXP, and the chip with the additional EEPROM is the ED2.
You'll have to read and compare the datasheets very carefully...
Tilmann
Thanks for refreshing my memory. It is already failing for code from 4 years
ago (did some repairs on it even after I left that company).
Indeed the old T... chip from Temic I used was different from the newer
AT...
I did have a look at the code again, and I did comment out the "flash the
block to be erased with 0xFF" the day after I put it in.
See code fragement below.
I also found a note that the Philips chip went though 2 incompatible
revisions, the Temic too...
Arie de Muynck
==================
//--------------------------------------------------------
// CMD_FLASH_ERASE erase a flash block
//--------------------------------------------------------
case CMD_FLASH_ERASE:
adr = net_get_word() & 0xE000; // parm1 = address
end = 0;
switch( adr)
{
case 0x2000: end = 0x3FFF; break; // accept only valid adr
case 0x4000: end = 0x7FFF; break;
case 0x8000: end = 0xBFFF; break;
case 0xC000: end = 0xFBFF; break;
default: // if not valid
net_put_byte( STS_BAD_PARM); // reject parm1
net_put_byte( 1);
net_send();
break;
}
if (end) // if valid block
{
b = 0xFF; // check if already empty
tmp = end;
while ((tmp >= adr) && (b == 0xFF))
b &= get_code( tmp--);
if (b != 0xFF) // if any byte programmed
iap_call( IAP_ERA_BLOCK, adr, 0); // start erase
/*------- fails anyway...
//----- AdM 040412
// Patch to allow TEMIC (EEPROM type): doesn't really erase.
// This causes checksum compare by controller to fail.
// We now detect the non-erase and write 0xFF instead.
b = 0xFF; // check if really empty
tmp = adr;
while ((tmp <= end) && (b == 0xFF))
b &= get_code( tmp++);
if( b != 0xFF) // if still programmed
{
tmp = adr; // just overwrite with 0xFF
while( tmp <= end)
iap_call( IAP_PROG_BYTE, tmp++, 0xFF);
}
---------------*/
net_sts_send( STS_OK); // return OK msg
}
break;