Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

Вопрос по Eeprom

Пт июл 01, 2022 19:20:22

Здравствуйте , что то совсем запутался - есть микросхема памяти - например AT24C04 .как я понимаю у нее 4 килобита памяти это 512 ячеек по 8 байт? То есть при обращении мы можем писать/читать из 512 ячеек 1 байт? Например -
записать (адрес 28, данные 105) -записать в ячейку 28 число 105. ? В ATMEGA все проще - еепром 1 килобайт и все понятно - доступно 1024 ячейки по 1 байту.

Re: Вопрос по Eeprom

Пт июл 01, 2022 19:25:18

Да, 512 ячеек по 8 бит (1 байт), итого 512 байт. Емкость указывают в битах потому, что организация выходного интерфейса может быть шириной не 8, а 16 и даже 32 бита, то есть за одно обращение может читаться как 1 байт, так и 2 или 4 байта. Особенно это актуально для SRAM и SDRAM памяти с параллельным интерфейсом.

Re: Вопрос по Eeprom

Пт июл 01, 2022 19:58:25

Так, уже понятней . значит как организована память (сколько бит может содержать ячейка ) читаем в даташите и радуемся .

Добавлено after 22 minutes 51 second:
А вот такая микросхема 24AA02E48T-I/OT может хранить разу 8 байт на одном адресе?

Re: Вопрос по Eeprom

Пт июл 01, 2022 20:07:51

Если хотите хранить и 16, 32, 64 битовые (и более) переменные -> разделить их на 8 бит и сохраняете их последовательно.
При чтении -> собрать их из 8 бита наоборот до 16, 32, 64 битовые.

Re: Вопрос по Eeprom

Пт июл 01, 2022 20:35:01

Нет, адреса ячеек - по каждому байту в одтельности. В этой микросхеме есть запись одного байта, а есть режим постраничной записи, когда после передачи адреса первой ячейки (совпадает с началом страницы) происходит запись целой страницы в 8 байт, вот так (вверху - запись 1 юайьа, внизу - запись целой страницы в 8 байт). Страничный режим годится для записи 64-битного long int.
Изображение
Из мануала:
6.2 Запись страницы
Байт управления записью, адрес слова и первый байт данных передаются на 24AA02XEXX так же, как при записи байта. Однако вместо создания условия остановки мастер передает до восьми байтов данных на 24AA02XEXX, которые временно сохраняются во встроенном страничном буфере и будут записаны в память после того, как мастер передаст условие остановки. При получении каждого слова три младших бита указателя адреса (четыре для 24AA025E48/24AA025E64) внутренне увеличиваются на «1». Старшие пять битов (четыре для 24AA025E48/24AA025E64) адреса слова остаются постоянными.
Если мастер должен передать более восьми слов (16 для 24AA025E48/24AA025E64) до того, как будет сгенерировано условие остановки, счетчик адресов перезапустится, и ранее полученные данные будут перезаписаны. Как и в случае с операцией записи байта, после получения условия Stop начнется внутренний цикл записи.
Примечание. Операции записи страницы ограничены записью байтов в пределах одной физической страницы независимо от количества фактически записываемых байтов. Границы физических страниц начинаются с адресов, кратных размеру буфера страницы (или «размеру страницы»), и заканчиваются адресами, кратными [размеру страницы — 1]. Если команда записи страницы пытается выполнить запись через границу физической страницы, в результате данные переносятся на начало текущей страницы (перезаписывая данные, ранее сохраненные там), а не на следующую страницу, как можно было бы ожидать. . Поэтому необходимо, чтобы прикладное программное обеспечение предотвращало операции записи страницы, которые попытаются пересечь границу страницы..


Чтение же может выполняться как произвольно (вверху), так и последовательно (внизу):
Изображение

8.2 Произвольное чтение
Операции произвольного чтения позволяют мастеру обращаться к любой ячейке памяти произвольным образом. Чтобы выполнить этот тип операции чтения, сначала должен быть установлен адрес слова. Это достигается путем отправки адреса слова на 24AA02XEXX как часть операции записи. Как только адрес слова отправлен, мастер генерирует условие запуска после подтверждения.
Это завершает операцию записи, но не раньше, чем будет установлен внутренний указатель адреса. Затем мастер снова выдает управляющий байт, но с битом R/W, установленным в «1».
Затем 24AA02XEXX выдаст подтверждение и передаст 8-битное слово данных. Мастер не подтвердит передачу, но создаст условие остановки, и 24AA02XEXX прекратит передачу

8.3 Последовательное чтение
Последовательное чтение инициируется так же, как и произвольное чтение, за исключением того, что после того, как 24AA02XEXX передаст первый байт данных, мастер выдает подтверждение, в отличие от условия остановки при произвольном чтении. Это предписывает 24AA02XEXX передать следующее последовательно адресованное 8-битное слово (рис. 8-3).
Для обеспечения последовательного чтения 24AA02XEXX содержит внутренний указатель адреса, который увеличивается на единицу после завершения каждой операции. Этот адресный указатель позволяет последовательно считывать все содержимое памяти за одну операцию.

Re: Вопрос по Eeprom

Пт июл 01, 2022 21:03:13

vdv22, память адресуется побайтно. Т.е., каждый байт храниться по своему адресу. Фишка постраничной адресации в том, что время записи всей страницы равно времени записи одного байта (при побайтной адресации). Это особенно ощутимо при больших размерах страниц (которые при большИх объёмах ЕЕПРОМ).
PS. Добавлю, что бы было окончательно понятно.) При записи одного байта, ЕЕПРОМ считывает всю страницу, изменяет в ней значение на ваш записываемый байт, стирает всю страницу и после этого записывает уже обновлённую страницу. Т.е, всегда производится операция со страницей, хотя вы можете записывать только один байт.

Re: Вопрос по Eeprom

Вс июл 03, 2022 19:07:53

Всем большое спасибо за разъяснения -пошел экспериментировать ).

Re: Вопрос по Eeprom

Пт авг 05, 2022 11:17:14

Еще одна непонятка с микросхемой - как я понял в нее можно записать 256 байт , пишу функцией типа write (address,data) ,та вот данные хорошо (корректно -что записал то и прочитал) записываются до адреса 127 -потом при чтении ячейки возвращается 255 и так с 127 до 255 . Подскажите, что это может быть?

Re: Вопрос по Eeprom

Пт авг 05, 2022 11:31:36

Без фрагмента программного кода, угадать ваши действия сложно. И какой именно тип тестовой EEPROM?
Последний раз редактировалось veso74 Пт авг 05, 2022 11:36:43, всего редактировалось 1 раз.

Re: Вопрос по Eeprom

Пт авг 05, 2022 11:36:55

I2C_write(200,200); // в ячейку 200 записываем значение 200
j=_read(200); // из ячейки с адресом 200 читаем значение и присваиваем переменной j - это значение равно 255

сама функция записи

void I2C_write(uint8_t address, uint8_t data) //пишем в eeprom
{

uint32_t count=0;
I2C1->CR2 = I2C_CR2_AUTOEND | (2 << 16) | I2C_CR2_START | (80 << 1); //передаем - 2 байта ,старт ,адрес ведомого.

while((I2C1->ISR & I2C_ISR_TXE) != I2C_ISR_TXE) // ждем передачи
{
count++;
if (count>30000)
{
err=1;
break;
}
}

I2C1->TXDR = address; // передаем адрес с которого писать
count=0;
while((I2C1->ISR & I2C_ISR_TXIS) != I2C_ISR_TXIS) // ждем подтверждения передачи
{
count++;
if (count>30000)
{
err=2;
break;
}
}
count=0;
I2C1->TXDR = data; // передаем даттные
while((I2C1->ISR & I2C_ISR_BUSY) == I2C_ISR_BUSY) // ждем освобождения линии
{
count++;
if (count>30000)
{
err=3;
break;
}
}

}

Добавлено after 1 minute 23 seconds:
// чтение I2C
uint8_t _read(unsigned char address) // чтение EEprom
{

I2C1->CR2 = (1 << 16) | I2C_CR2_START | (80 << 1); // пишем 1 байт ,старт ,адрес ведомого
while((I2C1->ISR & I2C_ISR_TXE) != I2C_ISR_TXE); // ждем передачи
I2C1->TXDR = address; // передаем адрес с которого писать
while((I2C1->ISR & I2C_ISR_TC) != I2C_ISR_TC); // ждем подтверждения приенма
I2C1->CR2 = I2C_CR2_STOP; // стоп

I2C1->CR2 = I2C_CR2_AUTOEND | (1<<16) | I2C_CR2_RD_WRN // автостоп,1 байт ,запрос на чтение ,старт ,передача адреса

| I2C_CR2_START | (80 << 1);

while((I2C1->ISR & I2C_ISR_RXNE) != I2C_ISR_RXNE); // ждем окончания приема

return ((uint8_t)I2C1->RXDR); // передаем принятое

}

Re: Вопрос по Eeprom

Пт авг 05, 2022 11:46:53

Нет, адреса ячеек - по каждому байту в одтельности.

Если хотите читать побайтно, то возьмите нормальную микросхему eeprom типа W27C512 и читайте её побайтно.

Re: Вопрос по Eeprom

Пт авг 05, 2022 11:55:43

24AA02E48T-I/OT - меня она привлекает своим маленьким корпусом и то что мне надо всего 200 ячеек для хранения .

Re: Вопрос по Eeprom

Пт авг 05, 2022 12:52:58

Используйте обычную EEPROM, напр. 24C02, 24LC02.
Для 24AA02E48:
Write Protection: The upper half of the array (80h-FFh) is permanently write-protected. Write operations to this address range are inhibited. Read operations are not affected. The remaining half of the array (00h-7Fh) can be written to and read from normally.

Re: Вопрос по Eeprom

Пт авг 05, 2022 18:37:32

огромное спасибо!! Надо читать даташит внимательно!!!
Ответить