Советую детальку (eeprom fram)

Тема в разделе "Посоветуйте детальки", создана пользователем ostrov, 10 ноя 2018.

  1. ostrov

    ostrov Гуру

    Все верно, Филин прав. ) Адресация однобайтовая, все работает отлично, все 256х8 байт. Вот окончательный вариант:
    Код (C++):
    // пример использования FRAM FM24Cxx для побайтной записи-чтения
    // проверено на FM24C16BG - 8 страниц 0x50-0x57, в каждой 256 байт,  адресация 0-255 (256==0 и так далее)
    // вопросы и предложения: ostrov http://forum.amperka.ru/

    #include <Wire.h>

    #define disk1 0x50   //страницы FM24C
    #define disk2 0x51
    #define disk3 0x52
    #define disk4 0x53
    #define disk5 0x54
    #define disk6 0x55
    #define disk7 0x56
    #define disk8 0x57

    void setup(void) {
      Wire.begin();
      Serial.begin(9600);

      // пишем байты
      FM24C_write_byte(disk1, 0, 20);
      FM24C_write_byte(disk1, 1, 21);
      FM24C_write_byte(disk1, 2, 22);
      FM24C_write_byte(disk1, 255, 15);
      FM24C_write_byte(disk2, 10, 20);
      FM24C_write_byte(disk5, 0, 55);

      // читаем байты
      Serial.println(FM24C_read_byte(disk1, 0));
      Serial.println(FM24C_read_byte(disk1, 1));
      Serial.println(FM24C_read_byte(disk1, 2));
      Serial.println(FM24C_read_byte(disk1, 255));
      Serial.println(FM24C_read_byte(disk2, 10));
      Serial.println(FM24C_read_byte(disk5, 256)); // == 0


      // пишем массив побайтно
      char hello[] = "hello, World!";
      for (byte i = 0; i < strlen(hello); i++) {
        FM24C_write_byte(disk6, i, hello[i]);
      }
      FM24C_write_byte(disk6, strlen(hello) + 1, 0x00);

      // читаем массив побайтно
      char buff[20];
      char b = 1;
      byte i = 0;
      while (b) {
        b = FM24C_read_byte(disk6, i);
        buff[i] = b;
        i++;
      }
      Serial.println(buff);
    }

    void loop() {}


    // -------------- функции чтение-запись ------------

    void FM24C_write_byte(byte disk, byte byteAddress, byte data) { // disk: 0x50-0x57,
      Wire.beginTransmission(disk);
      Wire.write(byteAddress);
      Wire.write(data);
      Wire.endTransmission();
      delay(1);
    }

    byte FM24C_read_byte(byte disk, byte byteAddress ) {
      byte rdata;
      Wire.beginTransmission(disk);
      Wire.write(byteAddress);
      Wire.endTransmission();
      Wire.requestFrom(disk, 1);
      if (Wire.available()) rdata = Wire.read();
      return rdata;
    }
     
     
    Последнее редактирование: 15 ноя 2018
  2. b707

    b707 Гуру

    благодаря последовательной записи доработки кода минимальны. Нет необходимсоти указывать адреса каждого байта..
    Максимальный размер блока записи за раз - по-моему 30 байт, если не ошибаюсь.
     
    DetSimen и ostrov нравится это.
  3. ostrov

    ostrov Гуру

    Наверное, ограничивается буфером i2с, он 32 байта что ли. Но его можно менять, например так:
    Код (C++):
    #define BUFFER_LENGTH 32
     
  4. ostrov

    ostrov Гуру

    Измерить? На что осциллограф то мне. ) Вообще, по отзывам, гораздо быстрее чем обычный EEPROM. А запись байте с задержкой 1мс производится, то есть примерно чуть больше. Для цепочки, наверное и ее не надо.
     
  5. ostrov

    ostrov Гуру

    Вот тут кто то уже свел в кучу все плюсы. Не известно, правда, насколько свежи данные. Но EEPROM рядом не валялась в любом случае по любому параметру.
     
  6. parovoZZ

    parovoZZ Гуру

    И даже по энергопотреблению?
     
  7. b707

    b707 Гуру

    посмотри ссылку - пишут энергопотребление меньше в 10 раз
     
  8. parovoZZ

    parovoZZ Гуру

    сука, всем хороша, но:
    отдельный корпус
    дорого.
     
  9. parovoZZ

    parovoZZ Гуру

    Только хотел написать, почему МК не делают на FRAM, как на глаза попались МК серии MSP430FR..
    Нашел у китайецев 4кб FRAM за 59 руб. Прикупить что ле?
    А если покупать на 16кб в количестве 10 штук, то каждая обойдется в 32 рубля.
     
  10. b707

    b707 Гуру

    я выше в этой ветке ссылку давал - 4кб FRAM по 25 руб
     
  11. DetSimen

    DetSimen Guest

    жалко, что их в DIP не делають :(
     
  12. b707

    b707 Гуру

    надо только придумать. куда их использовать. У меня с мая лежит 5 шт 4кб - потестировал и убрал в ящик. Пока такой задачи, чтоб требовала триллионы перезаписей :) - у меня не нашлось
     
  13. b707

    b707 Гуру

    я на переходную панельку в ДИП распаял
     
    DetSimen нравится это.
  14. parovoZZ

    parovoZZ Гуру

    ну да - стоят копейки.
     
  15. DetSimen

    DetSimen Guest

    дак ведь её то к переходной панельке тоже нада припаивать. А это превышает разрешающую способность моего глаза, даже вачках +3
     
  16. b707

    b707 Гуру

    у меня тоже зрение не очень. но пайка - это в некотором смысле вопрос привычки. После того как я умудрился QFP-32 паяльником запаять - у меня SOP-ы и TSOP-ы идут одной левой :)
     
  17. Igor68

    Igor68 Гуру

    Простите за мои 5 копеек!
    Попробуйте не I2C, а SPI вариант. Уверяю, что понравится! Да и 128 кб там не редкость.
    http://www.cypress.com/documentation/datasheets/fm25v20-2-mbit-256-k-8-serial-spi-f-ram
    Будет удобно если делаете так сказать диск. Начальные сектора, FAT и каталог размещаются в FRAM, а остальное в обычной FLASH. Как раз обращение к начальным секторам, FAT и каталогу происходит особенно часто и при этом данные на FLASH не всегда изменяются. А то время начала обращения к диску(просто подключение) и т.п. всё цуко в одну и ту же ячейку (первые 512 байт).:confused: А если файл отрывается для дозаписи (в приборах к примеру, где сами приборы по USB должны ещё и быть внешним диском)
     
  18. b707

    b707 Гуру

    2 Мбит на Али - примерно 500руб (есть и I2C и SPI - цена одинакова)
    Дороговато, но для виртуального диска наверно нормально...
     
  19. ostrov

    ostrov Гуру

    Я еепром использую, чаще всего, для хранения настроек. А их, как правило, мало, и сотня байт заглаза. В родной напрягало две веши: маленький ресурс и порча данных при сбое питания, я об этом писал ранее. Приходилось извращаться записывая три и более паза и сравнивая. Как тут с этим делом, в курсе кто?
     
  20. b707

    b707 Гуру

    личного опыта нет - но по той ссылке. что вы выше дали. как раз пишут, что риск порчи при записи существенно ниже, чем в ЕЕПРОМ - из-за того что запись короче