ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
5 апреля
1509934 Топик полностью
Nikolay_Po (03.04.2025 16:55, просмотров: 74) ответил Nikolay_Po на Вот вывод тестовой программы (перезапись в "быстром" режиме, сразу 256-ю байтами, все 0xFF):
Докладываю: при чтении и при записи FLASH, данные, блоками по 16 бит, подвергаются операции "исключающее или" (XOR) со значением 0x1CC6. 

В качестве подтверждения, предлагаю обратить внимание на состояние стёртой памяти в моём сообщении выше, а так же на результат перезаписи различных значений ячеек флеш значением 0xE339.


Вот значения, записанные в стёртую память, подписанные контрольной суммой CRC-32 (посчитанной модулем CRC МК):

FLASHdata start address: 0x08007000, size: 0x00001000

Flash content with a pattern
Page: 0 Data:  0x8007000:0x01010000  0x8007004:0x03030202  0x8007008:0x05050404  0x800700c:0x07070606  0x8007010:0x09090808  0x8007014:0x0B0B0A0A  0x8007018:0x0D0D0C0C  0x800701c:0x0F0F0E0E
Page: 0 Data:  0x8007020:0x11111010  0x8007024:0x13131212  0x8007028:0x15151414  0x800702c:0x17171616  0x8007030:0x19191818  0x8007034:0x1B1B1A1A  0x8007038:0x1D1D1C1C  0x800703c:0x1F1F1E1E
Page: 0 Data:  0x8007040:0x21212020  0x8007044:0x23232222  0x8007048:0x25252424  0x800704c:0x27272626  0x8007050:0x29292828  0x8007054:0x2B2B2A2A  0x8007058:0x2D2D2C2C  0x800705c:0x2F2F2E2E
Page: 0 Data:  0x8007060:0x31313030  0x8007064:0x33333232  0x8007068:0x35353434  0x800706c:0x37373636  0x8007070:0x39393838  0x8007074:0x3B3B3A3A  0x8007078:0x3D3D3C3C  0x800707c:0x3F3F3E3E
Page: 0 Data:  0x8007080:0x41414040  0x8007084:0x43434242  0x8007088:0x45454444  0x800708c:0x47474646  0x8007090:0x49494848  0x8007094:0x4B4B4A4A  0x8007098:0x4D4D4C4C  0x800709c:0x4F4F4E4E
Page: 0 Data:  0x80070a0:0x51515050  0x80070a4:0x53535252  0x80070a8:0x55555454  0x80070ac:0x57575656  0x80070b0:0x59595858  0x80070b4:0x5B5B5A5A  0x80070b8:0x5D5D5C5C  0x80070bc:0x5F5F5E5E
Page: 0 Data:  0x80070c0:0x61616060  0x80070c4:0x63636262  0x80070c8:0x65656464  0x80070cc:0x67676666  0x80070d0:0x69696868  0x80070d4:0x6B6B6A6A  0x80070d8:0x6D6D6C6C  0x80070dc:0x6F6F6E6E
Page: 0 Data:  0x80070e0:0x71717070  0x80070e4:0x73737272  0x80070e8:0x75757474  0x80070ec:0x77777676  0x80070f0:0x79797878  0x80070f4:0x7B7B7A7A  0x80070f8:0x7D7D7C7C  0x80070fc:0x7F7F7E7E
CRC of page 0 is: 0xC5D7D770

Page: 1 Data:  0x8007100:0x81818080  0x8007104:0x83838282  0x8007108:0x85858484  0x800710c:0x87878686  0x8007110:0x89898888  0x8007114:0x8B8B8A8A  0x8007118:0x8D8D8C8C  0x800711c:0x8F8F8E8E
Page: 1 Data:  0x8007120:0x91919090  0x8007124:0x93939292  0x8007128:0x95959494  0x800712c:0x97979696  0x8007130:0x99999898  0x8007134:0x9B9B9A9A  0x8007138:0x9D9D9C9C  0x800713c:0x9F9F9E9E
Page: 1 Data:  0x8007140:0xA1A1A0A0  0x8007144:0xA3A3A2A2  0x8007148:0xA5A5A4A4  0x800714c:0xA7A7A6A6  0x8007150:0xA9A9A8A8  0x8007154:0xABABAAAA  0x8007158:0xADADACAC  0x800715c:0xAFAFAEAE
Page: 1 Data:  0x8007160:0xB1B1B0B0  0x8007164:0xB3B3B2B2  0x8007168:0xB5B5B4B4  0x800716c:0xB7B7B6B6  0x8007170:0xB9B9B8B8  0x8007174:0xBBBBBABA  0x8007178:0xBDBDBCBC  0x800717c:0xBFBFBEBE
Page: 1 Data:  0x8007180:0xC1C1C0C0  0x8007184:0xC3C3C2C2  0x8007188:0xC5C5C4C4  0x800718c:0xC7C7C6C6  0x8007190:0xC9C9C8C8  0x8007194:0xCBCBCACA  0x8007198:0xCDCDCCCC  0x800719c:0xCFCFCECE
Page: 1 Data:  0x80071a0:0xD1D1D0D0  0x80071a4:0xD3D3D2D2  0x80071a8:0xD5D5D4D4  0x80071ac:0xD7D7D6D6  0x80071b0:0xD9D9D8D8  0x80071b4:0xDBDBDADA  0x80071b8:0xDDDDDCDC  0x80071bc:0xDFDFDEDE
Page: 1 Data:  0x80071c0:0xE1E1E0E0  0x80071c4:0xE3E3E2E2  0x80071c8:0xE5E5E4E4  0x80071cc:0xE7E7E6E6  0x80071d0:0xE9E9E8E8  0x80071d4:0xEBEBEAEA  0x80071d8:0xEDEDECEC  0x80071dc:0xEFEFEEEE
Page: 1 Data:  0x80071e0:0xF1F1F0F0  0x80071e4:0xF3F3F2F2  0x80071e8:0xF5F5F4F4  0x80071ec:0xF7F7F6F6  0x80071f0:0xF9F9F8F8  0x80071f4:0xFBFBFAFA  0x80071f8:0xFDFDFCFC  0x80071fc:0xFFFFFEFE
CRC of page 1 is: 0xBC97F246


Занято всего две страницы по 256 байт каждая (два минимальных блока записи). Тестовый код проверяет значения от 0 до 256 в каждом байте 16бит-полуслова (слово в данной архитектуре - 32 бита).
Выполнена запись в каждое полуслово значения 0xE339. Запись выполнена "быстрым" способом, 256 байт за один раз в каждую страницу. Стирание не использовалось, запись поверх тестовых данных.


Вот результат чтения после перезаписи (см. контрольные суммы):

Write 0xE339 over existing halfwords witout of erasing

Flash content after 0xFFFF write-over
Page: 0 Data:  0x8007000:0x01010000  0x8007004:0x03030202  0x8007008:0x05050404  0x800700c:0x07070606  0x8007010:0x09090808  0x8007014:0x0B0B0A0A  0x8007018:0x0D0D0C0C  0x800701c:0x0F0F0E0E
Page: 0 Data:  0x8007020:0x11111010  0x8007024:0x13131212  0x8007028:0x15151414  0x800702c:0x17171616  0x8007030:0x19191818  0x8007034:0x1B1B1A1A  0x8007038:0x1D1D1C1C  0x800703c:0x1F1F1E1E
Page: 0 Data:  0x8007040:0x21212020  0x8007044:0x23232222  0x8007048:0x25252424  0x800704c:0x27272626  0x8007050:0x29292828  0x8007054:0x2B2B2A2A  0x8007058:0x2D2D2C2C  0x800705c:0x2F2F2E2E
Page: 0 Data:  0x8007060:0x31313030  0x8007064:0x33333232  0x8007068:0x35353434  0x800706c:0x37373636  0x8007070:0x39393838  0x8007074:0x3B3B3A3A  0x8007078:0x3D3D3C3C  0x800707c:0x3F3F3E3E
Page: 0 Data:  0x8007080:0x41414040  0x8007084:0x43434242  0x8007088:0x45454444  0x800708c:0x47474646  0x8007090:0x49494848  0x8007094:0x4B4B4A4A  0x8007098:0x4D4D4C4C  0x800709c:0x4F4F4E4E
Page: 0 Data:  0x80070a0:0x51515050  0x80070a4:0x53535252  0x80070a8:0x55555454  0x80070ac:0x57575656  0x80070b0:0x59595858  0x80070b4:0x5B5B5A5A  0x80070b8:0x5D5D5C5C  0x80070bc:0x5F5F5E5E
Page: 0 Data:  0x80070c0:0x61616060  0x80070c4:0x63636262  0x80070c8:0x65656464  0x80070cc:0x67676666  0x80070d0:0x69696868  0x80070d4:0x6B6B6A6A  0x80070d8:0x6D6D6C6C  0x80070dc:0x6F6F6E6E
Page: 0 Data:  0x80070e0:0x71717070  0x80070e4:0x73737272  0x80070e8:0x75757474  0x80070ec:0x77777676  0x80070f0:0x79797878  0x80070f4:0x7B7B7A7A  0x80070f8:0x7D7D7C7C  0x80070fc:0x7F7F7E7E
CRC of page 0 is: 0xC5D7D770

Page: 1 Data:  0x8007100:0x81818080  0x8007104:0x83838282  0x8007108:0x85858484  0x800710c:0x87878686  0x8007110:0x89898888  0x8007114:0x8B8B8A8A  0x8007118:0x8D8D8C8C  0x800711c:0x8F8F8E8E
Page: 1 Data:  0x8007120:0x91919090  0x8007124:0x93939292  0x8007128:0x95959494  0x800712c:0x97979696  0x8007130:0x99999898  0x8007134:0x9B9B9A9A  0x8007138:0x9D9D9C9C  0x800713c:0x9F9F9E9E
Page: 1 Data:  0x8007140:0xA1A1A0A0  0x8007144:0xA3A3A2A2  0x8007148:0xA5A5A4A4  0x800714c:0xA7A7A6A6  0x8007150:0xA9A9A8A8  0x8007154:0xABABAAAA  0x8007158:0xADADACAC  0x800715c:0xAFAFAEAE
Page: 1 Data:  0x8007160:0xB1B1B0B0  0x8007164:0xB3B3B2B2  0x8007168:0xB5B5B4B4  0x800716c:0xB7B7B6B6  0x8007170:0xB9B9B8B8  0x8007174:0xBBBBBABA  0x8007178:0xBDBDBCBC  0x800717c:0xBFBFBEBE
Page: 1 Data:  0x8007180:0xC1C1C0C0  0x8007184:0xC3C3C2C2  0x8007188:0xC5C5C4C4  0x800718c:0xC7C7C6C6  0x8007190:0xC9C9C8C8  0x8007194:0xCBCBCACA  0x8007198:0xCDCDCCCC  0x800719c:0xCFCFCECE
Page: 1 Data:  0x80071a0:0xD1D1D0D0  0x80071a4:0xD3D3D2D2  0x80071a8:0xD5D5D4D4  0x80071ac:0xD7D7D6D6  0x80071b0:0xD9D9D8D8  0x80071b4:0xDBDBDADA  0x80071b8:0xDDDDDCDC  0x80071bc:0xDFDFDEDE
Page: 1 Data:  0x80071c0:0xE1E1E0E0  0x80071c4:0xE3E3E2E2  0x80071c8:0xE5E5E4E4  0x80071cc:0xE7E7E6E6  0x80071d0:0xE9E9E8E8  0x80071d4:0xEBEBEAEA  0x80071d8:0xEDEDECEC  0x80071dc:0xEFEFEEEE
Page: 1 Data:  0x80071e0:0xF1F1F0F0  0x80071e4:0xF3F3F2F2  0x80071e8:0xF5F5F4F4  0x80071ec:0xF7F7F6F6  0x80071f0:0xF9F9F8F8  0x80071f4:0xFBFBFAFA  0x80071f8:0xFDFDFCFC  0x80071fc:0xFFFFFEFE
CRC of page 1 is: 0xBC97F246


Как видно, данные не изменились. Что подтверждает предположение о применении функции XOR 0x1CC6 к данным флеш как при чтении, так и при записи.

Судите сами: Чистая флеш читается как 0xE339, что равно 0xFFFF XOR 0xE339. А запись 0xE339, эквивалентна по воздействию на ячейки записи 0xFFFF, так как 0xE339 XOR 0x1CC6 = 0xFFFF.