logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

[atmega2560][asm]Problem z eeprom at24c1024 po I2C

Malpa_gk 11 Cze 2009 01:05 1437 3
REKLAMA
  • #1 6641420
    Malpa_gk
    Poziom 16  
    Witam.
    Mój problem pojawia się podczas zapisu do pamięci at24c1024 wartości większej niż 127 (0x7F). Wartości mniejsze są prawidłowo zapisywane i odczytywane pod każdym adresem. Natomiast wartości większe od wspomnianej nie są zapisywane. Czy ktoś spotkał się już z podobnym problemem?
    Pozdrawiam.
  • REKLAMA
  • #2 6642373
    nsvinc
    Poziom 35  
    Powody mogą byc dwa:

    -Masz rozjechany I2C na tyle, ze podczas transmisji gubi sie ostatni bit miedzy kolejnymi ACKami
    -Masz uwaloną kość pamięci

    Za malo danych napisales nt. 'nie zapisywania' danych.
    Czy pamięc po prostu gubi ostatni bit zapisując rzeczywista ilosc bitów 7 i 8 zawsze jako 0?

    Moze byc tez problem z sama transmisja I2C - ACK jest zerem w postaci nadmiarowego bitu w transmitowanym bajcie o numerze 8 (0..7 dane, 8 ACK slot).
    Wystarczy rozjazd zegara wzgledem SDA i juz masz lipe.
  • REKLAMA
  • #3 6642511
    Malpa_gk
    Poziom 16  
    I2C wykorzystuje sprzętowy z procka. Z objawów jakie mam wynika, że jeżeli najstarszy bit w liczbie jest 1 (czyli od 0x80 włącznie) to liczba nie jest zapisywana. Liczby z zakresu 0x00 do 0x7F są zapisywane i odczytywanie poprawnie, ale większe nie są zapisywane. Więc nie gubię ostatniego bitu, a problemem jest pierwszy bit. Jednak dziękuje za zainteresowanie.
  • #4 6642577
    nsvinc
    Poziom 35  
    Fakt, I2C definiuje 'MSB first' , mój błąd :]

    Więc skoro pierwszy wysuwany na SDA bit '1' powoduje, ze pamięć odrzuca cały bajt, to znaczy ze cos jest nie tak z zegarem, lub I2CSTART (wlasnie tu bym szukał) Spróbuj do bólu zwolnić transmisję...

    W twoim przypadku najbardziej oplacaloby sie wpiąć się w to I2C sondą logiczną...
REKLAMA