Arduino Uno FT24C256A
- Войдите на сайт для отправки комментариев
Вс, 03/10/2021 - 21:02
Всех приветствую!
Сабж
Использую библиотеку
#include <Arduino.h> #include <Wire.h> #include <EEEPROM.h> #define EEPROM_I2C_ADDRESS 0x50 EEEPROM eMem; bool saveData = false; int addr=0; void setup() { Wire.begin(); Serial.begin(9600); onMem(); if(saveData) { byte dataA[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16, 17,18,19,20,21,22,23,24, 25,26,27,28,29,30,31,32 }, dataB[] = { 33,34,35,36,37,38,39,40, 41,42,43,44,45,46,47,48, 49,50,51,52,53,54,55,56, 57,58,59,60,61,62,63,64 }, dataC[] = { 65,66,67,68,69,70,71,72, 73,74,75,76,77,78,79,80, 81,82,83,84,85,86,87,88, 89,90,91,92,93,94,95,96 }; Serial.println("Memory written from: " + String(addr) + " dataA"); eMem.i2c_eeprom_write_page(EEPROM_I2C_ADDRESS, addr, (byte *)dataA, 32); // write to EEPROM delay(200); addr +=31; Serial.println("Memory written from: " + String(addr) + " dataB"); eMem.i2c_eeprom_write_page(EEPROM_I2C_ADDRESS, addr, (byte *)dataB, 32); // write to EEPROM delay(200); addr +=31; Serial.println("Memory written from: " + String(addr) + " dataC"); eMem.i2c_eeprom_write_page(EEPROM_I2C_ADDRESS, addr, (byte *)dataC, 32); // write to EEPROM delay(100); Serial.println("Memory written"); } else { Serial.println("READ ONLY"); } addr = 0; while (addr < 100) { Serial.print(addr, HEX); Serial.print(": "); Serial.println(eMem.i2c_eeprom_read_byte(EEPROM_I2C_ADDRESS, addr), HEX); addr++; } } void loop() { }
Вот что читаю (сгруппировал для єкономии места):
0: 43 1: 44 2: 45 3: 46 4: 47 5: 48 6: 49 7: 4A 8: 4B 9: 4C A: 4D B: 4E C: 4F D: 50 E: 51 F: 52 10: 53 11: 54 12: 55 13: 56 14: 57 15: 58 16: 59 17: 5A 18: 5B 19: 5C 1A: 5D 1B: 5E 1C: 1D 1D: 1E 1E: FF 1F: 21 20: 22 21: 23 22: 24 23: 25 24: 26 25: 27 26: 28 27: 29 28: 2A 29: 2B 2A: 2C 2B: 2D 2C: 2E 2D: 2F 2E: 30 2F: 31 30: 32 31: 33 32: 34 33: 35 34: 36 35: 37 36: 38 37: 39 38: 3A 39: 3B 3A: 3C 3B: 3D 3C: 3E 3D: 3D 3E: 41 3F: 42 40: FF 41: FF 42: 41 43: 42 44: 43 45: 44 46: 45 47: 46 48: 47 49: 48 4A: 49 4B: 4A 4C: 4B 4D: 4C 4E: 4D 4F: 4E 50: 4F 51: 50 52: 51 53: 52 54: 53 55: 54 56: 55 57: 56 58: 57 59: 58 5A: 59 5B: 5A 5C: 5B 5D: 5C 5E: 5D 5F: 5E 60: FF 61: FF 62: FF 63: FF
Что я делаю не так?
Спасибо всем
Помнится мне такое, что у Wire буфер в 32 байта на все, а не столь о на данные.
Походу вы правы!
Только осталась проблема с первыми 8 адресами:
PS
Да, я работаю ... пытаюсь :) ... через TCA9548 - может в этом еще подводный камень
PPS
А пример из букваря нормально работает
пишет с 0 адреса
Временно исключительно его и все будет ясно - он гадит или нет.
Ничего не дало. Подтянул SDA и SCL 10к на 5В, поменял ардуину ... Завтра куплю новую 24С256 и попробую. Может сама память накрылась. Хотя нет же - текст нормально пишется в первые адреса
:(
Если текст пишется, то вместо текстовой строки в подсуньте свои данные. Чудес-то не бывает - или в функции записи ошибка или в процедуре вывода. Или адрес не тот.
В сущности-то цифири верные, только 0x40 чем-то накидывается к каждой.
Попробовал писать побайтово - все числа от 0x00 до 0xFF пишутся нормально. Получается проблема в страничной записи.
Ищу "правильную" библиотеку
Спасибо за помощь :)
PS
Вот эта библиотека нормально сработала
Между записью в различные страницы нужно выдержать паузу - по дэйташиту 5 мс. На практике меньше, но пауза все равно нужна.