Zápisník experimentátora
Hierarchy: Externá EEPROM
Z nejakej odpálenej dosky som vyspájkoval 32 Kb EEPROM v SOIC8 púzdre. Plánujem ju použiť na test výdrže prepisovania, ale ešte predtým, ako ju definitívne zničím, zaujímalo ma, čo sa na EEPROM ukrýva. Dajú sa z takejto EEPROM ešte prečítať údaje? A aby som to zbytočne nenaťahoval, tak doska síce odpálená bola, ale EEPROM bola v poriadku a tu je kód, pomocou ktorého sa dajú z tejto konkrétnej EEPROM prečítať údaje.
Na tento experiment stačí iba pár súčiastok:
Arduino je upravené tak, že má na I2C (nachádza sa netradične na extra pinoch uprostred Arduina) prispájkovanú pin lištu s otvormi, aby sa pomocou dvoch prepojovacích vodičov dalo ľahko prepojiť s EEPROM.
Dve tlačidlá sa používajú na spustenie konkrétnych testov a sú pripojené na piny 6 a 8 na Arduine. EEPROM je pripojená na napájanie a adresové piny A0, A1 a A2 sú nezapojené. To platí ale iba pre tento konkrétny typ EEPROM. Ostatné musia obvykle pripojiť tieto piny na GND alebo na VCC, čím si nastavia I2C adresu. Treba si vždy skontrolovať datasheet ku konkrétnemu typu a nastaviť to podľa neho.
Pri pripojení neznámej EEPROM je vždy dobré vyskúšať, či komunikuje. Na to je vhodný I2C scanner, ktorý vám ukáže všetky I2C adresy. Ak sa nejaká adresa v zozname objaví, malo by to znamenať, že máte funkčný integrovaný obvod.
Pokiaľ sledujete seriál o externých EEPROM, nebude pre vás nič cudzie. Program som osekal na nutné minimum, čo znamená, že sa iba pripojím ku EEPROM a na sériový port pošlem celý jej obsah. Výpis som mierne upravil, aby bolo vidno aj znaky a nielen hexadecimálne 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);
}
}
Tu je výpis zo sériového portu. Iba tej časti, kde boli nejaké informácie.
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 sa tam pár textov, ktoré niečo naznačujú, že sa jednalo o akési komunikačné zariadenie.
Zdrojový kód sa nachádza na serveri GitHub.
16.04.2017