Zápisník experimentátora
Hierarchy: Externá EEPROM
Z nějaké odpálené desky jsem vyspájkoval 32 Kb EEPROM v SOIC8 pouzdře. Plánuji ji použít na test výdrže přepisování, ale ještě předtím, než ji definitivně zničím, zajímalo mě, co se na EEPROM ukrývá. Dají se z takové EEPROM ještě přečíst údaje? A abych to zbytečně nenatahovat, tak deska sice odpálena byla, ale EEPROM byla v pořádku a tady je kód, pomocí kterého se dají z této konkrétní EEPROM přečíst údaje.
Na tento experiment stačí pouze pár součástek:
Arduino je upraveno tak, že má na I2C (nachází se netradičně na extra pinech uprostřed Arduina) připájenou pin lištu s otvory, aby se pomocí dvou propojovacích vodičů dalo snadno propojit s EEPROM.
Dvě tlačítka se používají ke spuštění konkrétních testů a jsou připojeny na piny 6 a 8 na Arduinu. EEPROM je připojena k napájení a adresové piny A0, A1 a A2 jsou nezapojené. To platí ale pouze pro tento konkrétní typ EEPROM. Ostatní musí obvykle připojit tyto piny na GND nebo na VCC, čímž si nastaví I2C adresu. Je třeba si vždy zkontrolovat datasheet ke konkrétnímu typu a nastavit to podle něj.
Při připojení neznámé EEPROM je vždy dobré vyzkoušet, zda komunikuje. Na to je vhodný I2C scanner, který vám ukáže všechny I2C adresy. Pokud se nějaká adresa v seznamu objeví, mělo by to znamenat, že máte funkční integrovaný obvod.
Pokud sledujete seriál o externích EEPROM, nebude pro vás nic cizí. Program jsem zkrátil na nutné minimum, což znamená, že se pouze připojím ke EEPROM a na sériový port pošlu celý její obsah. Výpis jsem mírně upravil, aby bylo vidět i znaky a nejen hexadecimální hodnoty.
#include <extEEPROM.h>
//One 24C32WP EEPROMs on the bus
const uint32_t totalKBytes = 4; // for read and write test functions
extEEPROM eep(kbits_32, 1, 16);
void setup(void)
{
Serial.begin(115200);
uint8_t eepStatus = eep.begin(twiClock400kHz); //go fast!
if (eepStatus) {
Serial.print(F("extEEPROM.begin() failed, status = "));
Serial.println(eepStatus);
while (1);
}
// dump current EEPROM memory
dumpEEPROM(0, totalKBytes * 1024);
}
void loop(void)
{
}
// dump eeprom contents, 16 bytes at a time.
// always dumps a multiple of 16 bytes.
void dumpEEPROM(uint32_t startAddr, uint32_t nBytes)
{
Serial.print(F("EEPROM DUMP 0x"));
Serial.print(startAddr, HEX);
Serial.print(F(" 0x"));
Serial.print(nBytes, HEX);
Serial.print(F(" "));
Serial.print(startAddr);
Serial.print(F(" "));
Serial.println(nBytes);
uint32_t nRows = (nBytes + 15) >> 4;
uint8_t d[16];
char asciiDump[17];
for (uint32_t r = 0; r < nRows; r++) {
uint32_t a = startAddr + 16 * r;
eep.read(a, d, 16);
Serial.print(F("0x"));
if ( a < 16 * 16 * 16 ) Serial.print(F("0"));
if ( a < 16 * 16 ) Serial.print(F("0"));
if ( a < 16 ) Serial.print(F("0"));
Serial.print(a, HEX); Serial.print(F(" "));
for (int c = 0; c < 16; c++) {
if (d[c] < 16)
Serial.print(F("0"));
Serial.print(d[c], HEX);
Serial.print(c == 7 ? " " : " ");
if ((d[c] >= 0x20) && (d[c] < 0x7f))
asciiDump[c] = d[c];
else
asciiDump[c] = '.';
}
Serial.print(F(" "));
asciiDump[16] = 0;
Serial.println(asciiDump);
}
}
Zde je výpis ze sériového portu. Pouze té části, kde byly nějaké informace.
EEPROM DUMP 0x0 0x1000 0 4096 0x0000 1B 00 8C 16 00 02 01 00 00 00 01 50 00 00 08 11 ...........P.... 0x0010 B6 19 0A 1C 00 01 00 00 C2 01 02 00 06 C6 01 00 ................ 0x0020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0x0030 00 00 00 00 00 00 00 00 00 00 4B 15 39 42 0C 00 ..........K.9B.. 0x0040 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0x0050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0x0060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0x0070 00 00 00 00 00 00 00 00 00 00 A5 5A 00 00 00 00 ...........Z.... 0x0080 13 03 43 49 53 20 04 71 02 12 00 04 06 03 01 00 ..CIS .q........ 0x0090 00 00 00 05 0E 41 B1 39 B5 1E 2D 4E 56 30 FF FF .....A.9..-NV0.. 0x00A0 02 E9 00 07 06 01 00 00 00 01 00 15 52 07 01 41 ............R..A 0x00B0 74 68 65 72 6F 73 20 43 6F 6D 6D 75 6E 69 63 61 theros Communica 0x00C0 74 69 6F 6E 73 2C 20 49 6E 63 2E 00 41 52 35 30 tions, Inc..AR50 0x00D0 30 31 2D 30 30 30 30 2D 30 30 30 30 00 57 69 72 01-0000-0000.Wir 0x00E0 65 6C 65 73 73 20 4C 41 4E 20 52 65 66 65 72 65 eless LAN Refere 0x00F0 6E 63 65 20 43 61 72 64 00 30 30 00 FF 00 00 21 nce Card.00....! 0x0100 02 06 01 22 05 02 80 8D 5B 00 22 05 02 40 54 89 ..."....[."..@T. 0x0110 00 22 05 02 00 1B B7 00 22 05 02 80 A8 12 01 22 ."......"......" 0x0120 05 02 00 36 6E 01 22 05 02 00 51 25 02 22 05 02 ...6n."...Q%.".. 0x0130 00 6C DC 02 22 05 02 80 F9 37 03 22 05 02 00 A2 .l.."....7.".... 0x0140 4A 04 22 02 03 08 22 08 04 06 00 0C 42 39 15 4B J."...".....B9.K 0x0150 22 02 05 01 FF 00 00 00 00 00 00 00 00 00 00 00 "............... 0x0160 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................ 0x0170 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 00 00 ................ 0x0180 05 C8 03 50 E7 1A 01 04 37 82 BD 01 FF 02 FF 30 ...P....7......0 0x0190 A3 15 00 00 00 04 00 00 00 00 00 00 00 00 00 00 ................ 0x01A0 00 00 00 00 00 00 00 00 3C 2D 66 00 61 98 96 82 ........<-f.a... 0x01B0 45 51 B6 E0 6D DB 0F 02 0E 00 CA B0 B5 01 2E 00 EQ..m........... 0x01C0 F8 08 8B F6 59 C0 61 15 00 00 00 00 00 00 00 00 ....Y.a......... 0x01D0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0x01E0 00 00 00 00 84 28 66 00 61 98 96 82 45 51 55 DA .....(f.a...EQU. 0x01F0 1C 02 07 00 FF B0 B5 01 2D 00 00 00 70 FF FF 0A ........-...p... 0x0200 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0x0210 00 00 00 00 00 00 00 00 00 00 84 28 66 00 61 98 ...........(f.a. 0x0220 96 82 45 51 55 DA 1C 02 0E 00 FF B0 B5 21 2D 00 ..EQU........!-. 0x0230 28 28 70 FF 2E 17 FF 0A 80 00 01 A8 50 01 87 05 ((p.........P... 0x0240 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0x0250 13 10 12 11 40 14 42 41 31 30 34 32 00 00 00 00 ....@.BA1042.... 0x0260 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0x0270 00 80 00 00 00 00 00 00 00 00 68 06 B0 04 00 80 ..........h..... 0x0280 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0x0290 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 0x02A0 31 4D 54 7F 93 3C 05 12 31 19 2D 49 50 7F 93 3C 1MT..<..1.-IP..< 0x02B0 01 0E 2D 19 4A 56 64 78 8C AA B9 C1 CD 00 E0 90 ..-.JVdx........ 0x02C0 43 4A 49 AA 44 2E E7 9C 56 1A 00 80 43 5E 79 2A CJI.D...V...C^y* 0x02D0 04 2E E7 5C 66 21 00 80 43 4A B9 AA 04 2A F7 A0 ...\f!..CJ...*.. 0x02E0 57 18 00 90 4D 32 19 AA 44 36 F7 5C 47 17 00 90 W...M2..D6.\G... 0x02F0 4B 2E 69 AA 04 1E 49 59 66 24 00 90 4F 5A 89 29 K.i...IYf$..OZ.) 0x0300 06 2E 17 21 58 28 00 80 51 66 09 AA 06 3A 58 9D ...!X(..Qf...:X. 0x0310 49 20 E0 90 45 7A E9 2A 07 3E 38 A1 49 22 80 90 I ..Ez.*.>8.I".. 0x0320 4A 7E 09 2B 08 36 57 E1 39 19 70 AC B8 00 A0 81 J~.+.6W.9.p..... 0x0330 4E 7A 89 AB 08 42 99 DD 78 35 A0 81 4D 86 D9 2B Nz...B..x5..M..+ 0x0340 09 46 88 61 7A 35 C0 91 4F 86 B9 2B 09 3A A8 5D .F.az5..O..+.:.] 0x0350 78 34 70 AC B8 00 80 81 49 7E 19 2B 08 3A 89 5D x4p.....I~.+.:.] 0x0360 69 2C 00 82 48 56 59 2B 08 3E 78 61 59 30 E0 91 i,..HVY+.>xaY0.. 0x0370 50 3E 88 AB 08 36 48 9D 68 32 BA 14 A2 A9 BA 4C P>...6H.h2.....L 0x0380 A2 A9 BA 58 A2 A9 BA 68 A2 A9 BA 8C A2 A9 BA B4 ...X...h........ 0x0390 A2 A9 BA BD A2 A9 BA CD A2 A9 BA 70 AE EB BA B8 ...........p.... 0x03A0 AE EB BA 70 A8 CA BA AC A8 CA 00 00 00 00 50 4C ...p..........PL 0x03B0 68 5C 90 8C BD B4 64 24 24 64 6E 2E 6E 2E 60 50 h\....d$$dn.n.`P 0x03C0 94 62 AC 9C C9 C0 6E 62 6E 2E 2E 6E 2E 6E 89 70 .b....nbn..n.n.p 0x03D0 00 8E 00 00 00 00 2E 6E 00 6E 00 00 00 00 75 70 .......n.n....up 0x03E0 A2 9D 00 00 00 00 6E 2E 2E 6E 00 00 00 00 89 89 ......n..n...... 0x03F0 00 00 00 00 00 00 2E 2E 00 00 00 00 00 00 56 4A ..............VJ 0x0400 00 00 00 00 00 00 2E 2E 00 00 00 00 00 00 75 70 ..............up 0x0410 AC A2 00 B8 00 00 6E 2E 2E 6E 00 2E 00 00 75 70 ......n..n....up 0x0420 AC A2 00 00 00 00 6E 2E 2E 6E 00 00 00 00 68 4C ......n..n....hL 0x0430 B4 8C C1 BD 00 CD 2E 2E 2E 2E 6E 2E 00 2E 75 70 ..........n...up 0x0440 00 AC 00 00 00 00 68 28 00 28 00 00 00 00 75 70 ......h(.(....up 0x0450 00 AC 00 00 00 00 68 28 00 28 00 00 00 00 89 89 ......h(.(...... 0x0460 00 00 00 00 00 00 28 28 00 00 00 00 00 00 00 00 ......((........ 0x0470 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ................
Našlo se tam pár textů, které něco naznačují, že se jednalo o jakési komunikační zařízení.
Zdrojový kód se nachází na serveru GitHub.
25.01.2018