Вопрос по Eeprom

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить
Аватара пользователя
vdv22
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Чт июн 08, 2017 17:52:33

Вопрос по Eeprom

Сообщение vdv22 »

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

Re: Вопрос по Eeprom

Сообщение Up2805 »

Да, 512 ячеек по 8 бит (1 байт), итого 512 байт. Емкость указывают в битах потому, что организация выходного интерфейса может быть шириной не 8, а 16 и даже 32 бита, то есть за одно обращение может читаться как 1 байт, так и 2 или 4 байта. Особенно это актуально для SRAM и SDRAM памяти с параллельным интерфейсом.
Реклама
Аватара пользователя
vdv22
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Чт июн 08, 2017 17:52:33

Re: Вопрос по Eeprom

Сообщение vdv22 »

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

Добавлено after 22 minutes 51 second:
А вот такая микросхема 24AA02E48T-I/OT может хранить разу 8 байт на одном адресе?
veso74
Поставщик валерьянки для Кота
Сообщения: 1909
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Вопрос по Eeprom

Сообщение veso74 »

Если хотите хранить и 16, 32, 64 битовые (и более) переменные -> разделить их на 8 бит и сохраняете их последовательно.
При чтении -> собрать их из 8 бита наоборот до 16, 32, 64 битовые.
Реклама
Эиком - электронные компоненты и радиодетали
Up2805
Встал на лапы
Сообщения: 148
Зарегистрирован: Сб июн 04, 2022 05:21:07

Re: Вопрос по Eeprom

Сообщение Up2805 »

Нет, адреса ячеек - по каждому байту в одтельности. В этой микросхеме есть запись одного байта, а есть режим постраничной записи, когда после передачи адреса первой ячейки (совпадает с началом страницы) происходит запись целой страницы в 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 содержит внутренний указатель адреса, который увеличивается на единицу после завершения каждой операции. Этот адресный указатель позволяет последовательно считывать все содержимое памяти за одну операцию.
Реклама
OKF
Это не хвост, это антенна
Сообщения: 1393
Зарегистрирован: Вт июн 07, 2011 08:03:18

Re: Вопрос по Eeprom

Сообщение OKF »

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

Re: Вопрос по Eeprom

Сообщение vdv22 »

Всем большое спасибо за разъяснения -пошел экспериментировать ).
Аватара пользователя
vdv22
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Чт июн 08, 2017 17:52:33

Re: Вопрос по Eeprom

Сообщение vdv22 »

Еще одна непонятка с микросхемой - как я понял в нее можно записать 256 байт , пишу функцией типа write (address,data) ,та вот данные хорошо (корректно -что записал то и прочитал) записываются до адреса 127 -потом при чтении ячейки возвращается 255 и так с 127 до 255 . Подскажите, что это может быть?
veso74
Поставщик валерьянки для Кота
Сообщения: 1909
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Вопрос по Eeprom

Сообщение veso74 »

Без фрагмента программного кода, угадать ваши действия сложно. И какой именно тип тестовой EEPROM?
Последний раз редактировалось veso74 Пт авг 05, 2022 11:36:43, всего редактировалось 1 раз.
Аватара пользователя
vdv22
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Чт июн 08, 2017 17:52:33

Re: Вопрос по Eeprom

Сообщение vdv22 »

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); // передаем принятое

}
Аватара пользователя
electroget
Друг Кота
Сообщения: 4651
Зарегистрирован: Ср сен 30, 2020 16:51:47
Откуда: РФ

Re: Вопрос по Eeprom

Сообщение electroget »

[uquote="Up2805",url="/forum/viewtopic.php?p=4253391#p4253391"]Нет, адреса ячеек - по каждому байту в одтельности.[/uquote]
Если хотите читать побайтно, то возьмите нормальную микросхему eeprom типа W27C512 и читайте её побайтно.
Аватара пользователя
vdv22
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Чт июн 08, 2017 17:52:33

Re: Вопрос по Eeprom

Сообщение vdv22 »

24AA02E48T-I/OT - меня она привлекает своим маленьким корпусом и то что мне надо всего 200 ячеек для хранения .
veso74
Поставщик валерьянки для Кота
Сообщения: 1909
Зарегистрирован: Сб май 05, 2012 20:24:52
Откуда: KN34PC, Болгария
Контактная информация:

Re: Вопрос по Eeprom

Сообщение veso74 »

Используйте обычную 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.
Аватара пользователя
vdv22
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Чт июн 08, 2017 17:52:33

Re: Вопрос по Eeprom

Сообщение vdv22 »

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

Вернуться в «Периферия»