Jump to content

alkom

Members
  • Content Count

    5
  • Joined

  • Last visited

Community Reputation

0 Обычный

About alkom

  • Rank
    Новенький

Информация

  • Город
    Николаев

Электроника

  • Стаж в электронике
    3-5 лет
  1. В общем там действительно страничная организация памяти и если во время последовательной записи упираемся в конец страницы то все что дальше просто игнорируется. Хотя в их даташите я так этого и не нашел, видимо мое знание английского не дотягивает. Теперь маленькие объемы пишу просто побайтово, а большие страницами. Пока все работает, спасибо за помощь!
  2. Память точно целая. Вот два куска кода для примера: Просто проверка всех адресов микросхемы: unsigned long read, write; unsigned int adr; write = 0xAAAAAAAA; for(adr = 0; adr < 0x7FFF; adr+=4) { if(!(adr%100)) { sprintf(debug_txb, "Adr: %u\r\n", adr); U1TXREG = debug_txb[0]; } ee_wrDword(adr, write); read = ee_rdDword(adr); if (read != write) { sprintf(debug_txb, "Adr: %u Write: %lu Read: %lu", adr, write, read); U1TXREG = debug_txb[0]; } } это работает без запинки. А вот код который должен бы работать: for(i = 0; i < 8; i++) { if((RtccTimeDate.f.hour == DEC2BCD(ctrl_points[i])) && (RtccTimeDate.f.min == 0)) { int j; int pointer = ee_rdInt(ADDR_POINTER); for (j = 0; j < COUNTERS; j++) { ee_wrDword(pointer + j*4 + i*24, counters[j].total_value); } } } Но не работает( Отладчиком захожу в функцию записи - все параметры передаются правильно, вроде как записывается, а читается фигня.
  3. WP не дергаю, не надо оно мне. Выяснил тут новые подробности. Ошибка повторяется на конкретных адресах памяти, раньше не заметил, т. к. запись ведется со смещением. Некоторые ячейки читаются всегда одинаково, в не зависимости от того что в них записали. Пока нашел 2 таких, одна читается как 0 другая как 0x67. Вроде как похоже на битую память, но блин на тестовой прошивке, которая забивает всю память какими либо числами и делает верификацию всё работает, ни одной ошибки блин! Я уже прилепил чтение и верификацию прямо в процедуру записи - фиг, читается всё тот же мусор, то есть ни в каком другом месте программы ячейки эти не перезаписываются. Мистика блин!
  4. У EEPROM не страничная организация, там есть только буфер записи в 64 байта. Перед записью проверяется опустошение этого самого буфера, то есть завершение процесса записи (цикл в функции ee_adress()) в полном соответствии с Datasheet. Да и задержки я пробовал добавлять, не помогает
  5. Привет! Есть у меня один проект на pic24, который использует EEPROM 24LC256. И все бы хорошо, но иногда данные записываются некорректно. Чаще всего такое происходит при записи 4х байтовых чисел, хотя они в основном и пишутся, так что не удивительно. И чаще всего повреждается последний байт числа. Повреждается примерно один из нескольких десятков байт. Память висит на довольно короткой шине ~1.5 см от контроллера, подтяжки на линиях 4.7кОм. С памятью работаю на частоте 400 кГц, снижение частоты не дало никакого эффекта. Повторяется бага на нескольких одинаковых платах. Закономерности выявить не удалось. Выяснил только что мой код пытается записать правильные данные, то есть повреждаются они именно в процессе записи. Привожу фрагмент кода для роботы с eeprom: unsigned char ee_adress(int adr) { unsigned char cmd; cmd = 0xA0; // | ((adr >> 7)&0xE); while (1) { StartI2C(); IdleI2C(); // send command and address msb(3) MasterWriteI2C(cmd + WRITE_CMD); IdleI2C(); if (I2CSTATbits.ACKSTAT == 0) break; StopI2C(); IdleI2C(); } // while waiting for ACK // 3. send address lsb MasterWriteI2C(adr >> 8); IdleI2C(); MasterWriteI2C(adr & 0xFF); IdleI2C(); // 4. exit returning the cmd byte return cmd; } void ee_wrDword(int adr, unsigned long data) { // 1. select address ee_adress(adr); // 2. stream data out MasterWriteI2C((data >> 24) & 0xFF); IdleI2C(); MasterWriteI2C((data >> 16) & 0xFF); IdleI2C(); MasterWriteI2C((data >> 8 ) & 0xFF); IdleI2C(); MasterWriteI2C((data >> 0 ) & 0xFF); IdleI2C(); // 3. terminate the command sequence StopI2C(); IdleI2C(); } Может кто то сталкивался с подобным? В какую сторону копать? Я уже все на что фантазии хватило перепробовал.
×
×
  • Create New...