STM32 - I2C - запись последовательных данных - PullRequest
0 голосов
/ 02 декабря 2018

Я использую AT24C512 EEPROM, который составляет 512 КБ вместе с моим STM32

. Я могу записать 128 байтов данных одновременно, используя

HAL_I2C_Mem_Write(&_EEPROM24XX_I2C,0xa0,Address,I2C_MEMADD_SIZE_16BIT,(uint8_t*)data,size_of_data,100)

, но проблема в том, что я хочузаписывать больше данных после только что записанных данных, но EEPROM заменит данные, так как Адрес тот же

, так как я могу пропустить записанный адрес?

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

Я думаю, вам следует проверить страницу данных AT24C512. 7.

Если в EEPROM передано более 128 слов данных, адрес слова данных будет «перевернут», и предыдущие данные будутбыть перезаписанАдрес «перевернутый» во время записи - от последнего байта текущей страницы до первого байта той же страницы.

0 голосов
/ 02 декабря 2018

Этот ответ не об использовании HAL с I2C, но надеюсь, что он укажет вам

Просто проверьте таблицу данных (я изучаю STM32F0), и вы увидите, что ограничение составляет 255 байт.(зарегистрируйте CR2: NBYTES), я не уверен, есть ли другое ограничение в HAL, но используя прямой доступ к регистрам, вы можете отправить 255 байт за раз или фрагментировать его и отправить сколько хотите.

Дляво фрагментации есть бит CR2: RELOAD, если вы установите это, то в конце передача не будет остановлена, и вы можете обновить следующие NBYTES, .. когда вы установите последний блок байтов (который будет соответствовать NBYTES), тогда сбросьте битCR2: RELOAD.

Это имеет один недостаток: каждые 255 байтов вы будете прерываться.

...