Стирание флэш-памяти в блоках (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