Slave adresa I2C nie je potvrdená (niekedy)
Snažím sa komunikovať so vzdialene pripojeným FRAM (FM24C04 od Ramtron) cez I2C. Táto pamäť je vložená na karte, ktorú je možné kedykoľvek vložiť a odstrániť zo systému (komunikácia je správne ukončená pred odstránením pamäte).
Problém je: Ihneď po vložení karty, ktorá obsahuje FRAM, adresu niekedy nepotvrdené.
Merania signálu
Meral som signály, aby som zistil, čo sa stalo, a zdá sa, že načasovanie je v obidvoch prípadoch v poriadku (funguje aj nefunguje).
Správna komunikácia I2C (prečítané 3 bajty):

Adresa I2C FRAM nie je potvrdená (adresa slave je odoslaná správne):
Už prijaté opatrenia na vyriešenie tohto problému (neúspešné)
- Pridané oneskorenie po vložení karty so zabudovaným rámčekom FRAM, aby sa zabezpečilo dodržanie postupnosti napájania.
- I2C sa zastaví po rozpoznaní adresy slave, ktorá nebola potvrdená
Konfigurácia zbernice I2C
- Jeden hlavný (mikrokontrolér STM32F205 od ST)
- Traja otroci (EEPROM 24AA1025 od Microchip, RTC DS1339C od Maxim IC a vzdialený FRAM FM24C04 od Ramtron
- Posunovač úrovne I2C (MAX3373E od Maxim IC) umožňuje komunikáciu medzi hlavnou jednotkou a FRAM
- Frekvencia zbernice nastavená na 100 kHz
EDITOVANÉ (2013-04-17)
V prvom rade vám veľmi pekne ďakujem za vaše pripomienky.
Pretože existuje veľa návrhov, tu je popis výskumu, ktorý som urobil.
Schéma
Nasledujúci obrázok zobrazuje zjednodušenú schému zbernice I2C:
Signály I2C_SDA a I2C_SCL sú pripojené priamo k mikrokontroléru a signály FRAM_SDA a FRAM_SCL sú pripojené k FRAM. Upozorňujeme, že signály SDA a SCL pripojené k FRAM sú filtrované pomocou feritov Murata BLM18.
FRAM je pripojený nasledovne:
- NC (pin 1) -> nepripojené
- A1 (pin 2) -> GND
- A2 (kolík 3) -> GND
- VSS (pin 4) -> GND
- SDA (pin 5) -> FRAM_SDA
- SCL (pin 6) -> FRAM_SCL
- WP (Pin 7) -> GND (bez ochrany proti zápisu)
- VDD (pin 8) -> + 5V
Popis karty FRAM
Táto karta je karta typu „ISA“, v ktorej je vložený iba rámček FRAM.
Vyšetrovania
Spomaľte frekvenciu
Spustil som testy s frekvenciou SCL 50kHz a 10kHz. Signál SCL som zmeral osciloskopom, aby som sa ubezpečil, že je na očakávanej frekvencii.
Tieto zmeny problém nevyriešili. Skontroloval som časovanie a sú v súlade so špecifikáciami údajového listu FRAM.
Zaistenie aktuálnej postupnosti
- Posunovač úrovne I2C sa prepne do trojstavového režimu predtým, ako sa vloží karta, do ktorej je vložený rámček FRAM. Signály FRAM_SDA a FRAM_SCL sú stiahnuté nízko.
- Po vložení „karty FRAM“ sa pridá oneskorenie 100 ms, aby sa zabezpečilo stabilizované napájanie (požadované podľa údajového listu najmenej 11 ms pred prvým štartovacím stavom).
- Je aktivovaný radič úrovne I2C.
- Pridáva sa oneskorenie 1 ms, aby sa zabezpečilo, že je aktivovaný radič úrovne I2C a linky sú vytiahnuté vysoko (
4us požadované podľa údajového listu). Získajú sa signály FRAM_SDA a FRAM_SCL.
Signály FRAM_SDA a FRAM_SCL sa merali po každom kroku.
Problém stále pretrváva.
Podmienka stop/štart namiesto opakovaného štartu
Pokúsil som sa zastaviť pred reštartom počas prenosu bajtov. Meral som prenos bajtov pomocou osciloskopu: stav STOP nasledovaný stavom START je v poriadku.
Toto riešenie bohužiaľ problém nevyrieši.
myšlienky
Tento problém nastáva až po pripojení karty vloženej do FRAM. Vykonal som niekoľko tisíc úspešných prístupov na čítanie (podriadené adresovanie a čítanie) po vložení a správnom adresovaní „karty FRAM“.
Znie mi to čoraz viac ako problém s hardvérom. Neviem však, či by to mohlo súvisieť s radičom úrovne I2C alebo inými podriadenými na zbernici I2C.
Máte nejaké ďalšie nápady alebo návrhy?
EDITOVANÉ (2013-04-18)
Zdá sa, že problém je vyriešený
Vymenil som konektor modulu FRAM a našiel som spôsob, ako robiť merania priamo na FRAM. Zdá sa, že s týmto novým konektorom funguje všetko dobre.
Urobím viac testov, aby som sa ubezpečil, že problém je spôsobený zlou asociáciou.
Aj keď sa hovorí, že vaša komunikácia bola pred vložením alebo odstránením správne vypnutá, toto riešenie by možno stálo za vyskúšanie, pretože zbernica I2C môže po resetovaní spôsobiť problémy iba jednému zo zariadení na zbernici.
Pred inicializáciou hlavného hardvéru I2C nastavte ako vstup SDA a otestujte, či je SDA nízka.
Ak je nízka, nastavte kolík SCL vysoko.
Potom prepnite kolík SCL na nízku a vysokú, kým sa SDA nedostane na vysokú hodnotu (t. J. Zrušte všetky zvyšné bity, ktoré sa periférne zariadenia stále môžu pokúšať odoslať). To nemôže trvať dlhšie ako 8 hodinových cyklov. Ak áno, potom je tu ďalší problém.
Nemôžem zaručiť, že to vyrieši váš problém, ale vyriešilo to môj!
- Najskôr pripojte GND a Vcc.
- Potom sa uistite, či sú A1, A2 a WP na správnej úrovni.
- Až potom sa pripojia dátové kolíky.
Pripojenie iných pinov ako napájacieho zdroja pred zapnutím čipu môže spôsobiť problémy.
10k sa zdá byť pre vaše príťahy trochu veľký a vaše nábežné hrany vyzerajú pomaly. Znížte odpor na približne 3 kB a zistite, či to pomáha.
Prečo sa vypínacie napätie časom mení?
Je nejaká šanca, že sa s touto komisiou pokúsi hovoriť niečo iné? Raz som mala taký problém; 60% času som mohol dostať potvrdenie, ale nepamätám si, že by som niekedy videl kolíziu. Mám podozrenie, že poskytnutý i2c bol nejako izolovaný od skutočnej internej zbernice. Mohol som to spustiť nepretržite a zmazalo by to iba 30% správ. Problém zmizol v okamihu, keď sme hovorili priamo so zariadením (napájacím zdrojom) bez „základnej dosky“ medzi nimi.
Po chybe NAK sa nezobrazí žiadna sekvencia zastavenia. Hádam, že máte bod prerušenia, ktorý zastaví program v tom bode?
Ak si myslíte, že ste v autobuse iba vy, môžete skúsiť nahradiť opakovaný štart stopom/štartom. Videl som zariadenia (hlavne vlastné FPGA), ktoré nevedeli presne, ako zvládnuť RS.
[Odpoveď na komentár]: Je veľa toho, čo ste o karte FRAM nepovedali, napríklad to, či je to iba pamäť alebo celý subsystém. Pokiaľ by ste ale mohli nasadiť puškohľad priamo na káble zariadenia i2c, ktoré vám spôsobujú problémy, a stále vidíte, čo je na obrázku, vylúčil by som interferenciu. I2C je taký jednoduchý, že pokiaľ nemáte interný problém, čip by mal hrať správne, ak na vstupe vidíte správne signály.
Najmä sa chcete dostať na stránku FRAM tohto radiča úrovní. Prerušenie signálu je pravdepodobnejšie ako niečo, čo sa bežne považuje za kolíziu.
Podotknem, že cyklus NAK je na nerozoznanie od čipu, ktorý tam jednoducho nie je. EEPROM to robia, aby naznačili, že sú zaneprázdnené. Vyhľadal som čas zápisu na FRAM a je rýchlejší ako jeden dátový bit i2c. tak to nie je problém.
Pretože problémom s prehrávaním je pretrvávajúca chyba, ktorú je možné opraviť iba odstránením a opätovným vložením zariadenia, ide o jednu z dvoch vecí: zariadenie je v zlom stave, z ktorého sa zotavuje až po vypnutí a zapnutí. . alebo je zlý kontakt.
Ak zariadenie prejde do zlého stavu, z ktorého sa zotavuje po vypnutí a zapnutí, môžete mať k dispozícii ďalšie obvody, ktoré môže váš MCU použiť na vypnutie zariadenia. Firmvér potom, čo nedostane potvrdenie od zariadenia, môže potom vykonať proces obnovy, pri ktorom na určitý čas vypne čip, znova ho zapne a potom sa pokúsi znova.
Ak je kontakt zlý, možno budete musieť skontrolovať spoľahlivosť konektora a nájsť niečo lepšie. Použitie rovnakého konektora na výrobu ďalších z týchto kariet môže spôsobiť problémy v teréne. V obidvoch prípadoch môže dôjsť k ľudskému procesu, ktorý situáciu vyrieši. Operátor pracujúci so zariadením musí byť oboznámený s možným problémom s vložením karty a pre správnu funkciu môže byť potrebné jeho opätovné vloženie.
Vaša hlavná jednotka môže spustiť alarm, ktorý signalizuje, že nemôže hovoriť s FRAM: LED „chyba“ na ovládacom paneli a/alebo pípnutie alebo čokoľvek iné. Alebo naopak: Kontrolka, ktorá sa rozsvieti a dá používateľovi spätnú väzbu, že bol FRAM prijatý a bola nadviazaná komunikácia. Ak je FRAM ďaleko od hlavného zariadenia, svetlo môže byť na module FRAM: ďalší čip I2C, ktorý poháňa LED.
Sporadická povaha problému naznačuje, že by mohlo ísť o problém s načasovaním.
Údajový list obsahuje dve časové rady, jednu pre „štandardný režim“ a jednu pre „rýchly režim“. Z vašich meraní vidno, že ste na hranici časovania „štandardného režimu“. Z dátového listu nemôžem povedať, ako presne je čip vložený do jedného z dvoch režimov.
Nepredpokladal by som, že je vaše zariadenie v rýchlom režime. Ak môžete znížiť časovanie o faktor 2 až 4, uistite sa, že sa nachádzate v časovaní štandardného režimu pre čas pozastavenia začiatočnej podmienky, čas vysokej hodiny a dobu nízku, a skontrolujte, či tento problém pretrváva?
Máte 24c04a, b alebo c? Ak je to c04a, bol to robustný dizajn. Časť b je citlivá na rampy napájania. Aké oddelenie máte na Pin8? Chcel som povedať niečo o úrovniach signálu, ale vidím, že používate prekladač úrovní. Možno budete chcieť skontrolovať, či sa vám pri SCL nezobrazí chyba, ktorú by čip interpretoval ako ďalšie hodiny.