| Форум РадиоКот https://radiokot.ru/forum/ |
|
| Вопрос по Eeprom https://radiokot.ru/forum/viewtopic.php?f=61&t=183484 |
Страница 1 из 1 |
| Автор: | vdv22 [ Пт июл 01, 2022 19:20:22 ] |
| Заголовок сообщения: | Вопрос по Eeprom |
Здравствуйте , что то совсем запутался - есть микросхема памяти - например AT24C04 .как я понимаю у нее 4 килобита памяти это 512 ячеек по 8 байт? То есть при обращении мы можем писать/читать из 512 ячеек 1 байт? Например - записать (адрес 28, данные 105) -записать в ячейку 28 число 105. ? В ATMEGA все проще - еепром 1 килобайт и все понятно - доступно 1024 ячейки по 1 байту. |
|
| Автор: | Up2805 [ Пт июл 01, 2022 19:25:18 ] |
| Заголовок сообщения: | Re: Вопрос по Eeprom |
Да, 512 ячеек по 8 бит (1 байт), итого 512 байт. Емкость указывают в битах потому, что организация выходного интерфейса может быть шириной не 8, а 16 и даже 32 бита, то есть за одно обращение может читаться как 1 байт, так и 2 или 4 байта. Особенно это актуально для SRAM и SDRAM памяти с параллельным интерфейсом. |
|
| Автор: | vdv22 [ Пт июл 01, 2022 19:58:25 ] |
| Заголовок сообщения: | Re: Вопрос по Eeprom |
Так, уже понятней . значит как организована память (сколько бит может содержать ячейка ) читаем в даташите и радуемся . Добавлено after 22 minutes 51 second: А вот такая микросхема 24AA02E48T-I/OT может хранить разу 8 байт на одном адресе? |
|
| Автор: | veso74 [ Пт июл 01, 2022 20:07:51 ] |
| Заголовок сообщения: | Re: Вопрос по Eeprom |
Если хотите хранить и 16, 32, 64 битовые (и более) переменные -> разделить их на 8 бит и сохраняете их последовательно. При чтении -> собрать их из 8 бита наоборот до 16, 32, 64 битовые. |
|
| Автор: | OKF [ Пт июл 01, 2022 21:03:13 ] |
| Заголовок сообщения: | Re: Вопрос по Eeprom |
vdv22, память адресуется побайтно. Т.е., каждый байт храниться по своему адресу. Фишка постраничной адресации в том, что время записи всей страницы равно времени записи одного байта (при побайтной адресации). Это особенно ощутимо при больших размерах страниц (которые при большИх объёмах ЕЕПРОМ). PS. Добавлю, что бы было окончательно понятно.) При записи одного байта, ЕЕПРОМ считывает всю страницу, изменяет в ней значение на ваш записываемый байт, стирает всю страницу и после этого записывает уже обновлённую страницу. Т.е, всегда производится операция со страницей, хотя вы можете записывать только один байт. |
|
| Автор: | vdv22 [ Вс июл 03, 2022 19:07:53 ] |
| Заголовок сообщения: | Re: Вопрос по Eeprom |
Всем большое спасибо за разъяснения -пошел экспериментировать ). |
|
| Автор: | vdv22 [ Пт авг 05, 2022 11:17:14 ] |
| Заголовок сообщения: | Re: Вопрос по Eeprom |
Еще одна непонятка с микросхемой - как я понял в нее можно записать 256 байт , пишу функцией типа write (address,data) ,та вот данные хорошо (корректно -что записал то и прочитал) записываются до адреса 127 -потом при чтении ячейки возвращается 255 и так с 127 до 255 . Подскажите, что это может быть? |
|
| Автор: | veso74 [ Пт авг 05, 2022 11:31:36 ] |
| Заголовок сообщения: | Re: Вопрос по Eeprom |
Без фрагмента программного кода, угадать ваши действия сложно. И какой именно тип тестовой EEPROM? |
|
| Автор: | vdv22 [ Пт авг 05, 2022 11:36:55 ] |
| Заголовок сообщения: | Re: Вопрос по Eeprom |
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 [ Пт авг 05, 2022 11:46:53 ] |
| Заголовок сообщения: | Re: Вопрос по Eeprom |
Нет, адреса ячеек - по каждому байту в одтельности. Если хотите читать побайтно, то возьмите нормальную микросхему eeprom типа W27C512 и читайте её побайтно. |
|
| Автор: | vdv22 [ Пт авг 05, 2022 11:55:43 ] |
| Заголовок сообщения: | Re: Вопрос по Eeprom |
24AA02E48T-I/OT - меня она привлекает своим маленьким корпусом и то что мне надо всего 200 ячеек для хранения . |
|
| Автор: | veso74 [ Пт авг 05, 2022 12:52:58 ] |
| Заголовок сообщения: | Re: Вопрос по Eeprom |
Используйте обычную 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 [ Пт авг 05, 2022 18:37:32 ] |
| Заголовок сообщения: | Re: Вопрос по Eeprom |
огромное спасибо!! Надо читать даташит внимательно!!! |
|
| Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|


