Стирание флэш-памяти в блоках (1024 байта)

Я работаю над созданием загрузчика. Я должен стереть 1024 байта памяти, прежде чем что-то записать в эти регистры в этом блоке. Даже если я хочу записать 2 байта, я вынужден стереть 1024 байта. Моя проблема в том, что я не знаю, где начинается каждый блок. Например, допустим, я хочу записать следующие байты по этому адресу.

Адрес: 0x198F0

Б:C80E00010001616FDFECD6F08C8C92EC

Когда я пытаюсь стереть 1024 байта, начиная с адреса 0x198F0Я заметил, что он начинает стираться из 0x19800 вместо.

Как узнать, откуда начинается каждый блок, чтобы вычислить его в программном обеспечении?

Причина, по которой я хочу это знать, заключается в том, что я могу скопировать весь блок в оперативную память, прежде чем стереть его, затем изменить его и записать обратно в тот же блок. Я использую PIC18f87J11 с компилятором MPLAB XC8. Я надеюсь, ясно, что я пытаюсь сделать, иначе дайте мне знать в комментариях.

Спасибо!

1 ответ

Решение

Блоки флэш-памяти PIC18f87J11 выровнены по 1024 байта. Чтобы вычислить начальный адрес некоторого блока, установите последние 10 бит адреса равными 0, так что вы можете использовать:

StartAddress = AddressPtr and 0xFFFC00

В твоем случае:

0x198F0 and 0xFFFC00 = 0x19800 
Другие вопросы по тегам