F40-43a (1041604), страница 32
Текст из файла (страница 32)
Это приведет к тому, что операции записи с помощью команды MOVX будутотноситься не к памяти XRAM, а к Flash-памяти. Бит PSWE остается установленным в 1 до сброса егопрограммным путем. Чтобы предотвратить случайную запись во Flash-память, рекомендуется запрещатьпрерывания на все время, пока бит PSWE установлен в 1.Для чтения Flash-памяти следует использовать команду MOVC. Чтение с использованием командыMOVX всегда относится к памяти XRAM, независимо от состояния бита PSWE.Чтобы гарантировать целостность содержимого Flash-памяти, строго рекомендуется включитьсхему слежения за напряжением питания, соединив вывод MOVEN с шиной питания VDD.
Это касаетсялюбых систем, которые содержат код, осуществляющий запись/стирание Flash-памяти программнымпутем.Запись во Flash-память может сбросить в 0 биты, но не может установить их в 1. Только операциястирания может установить в 1 биты во Flash-памяти. Поэтому ячейку памяти, которую требуетсязапрограммировать, необходимо предварительно стереть, чтобы можно было записать новое значение.64-Кбайтная Flash-память организована секторами по 512 байт. Операция стирания применяется ко всемусектору целиком (все байты в секторе устанавливаются в 0xFF). Ниже приведен алгоритм программированияFlash-памяти программным путем:1. Запретить прерывания.2.
Установить в 1 бит FLWE (FLSCL.0) для разрешения записи/стирания Flash-памяти программным путем.3. Установить в 1 бит PSEE (PSCTL.1) для разрешения стирания Flash-памяти.4. Установить в 1 бит PSWE (PSCTL.0) для перенаправления действия команд MOVX на запись Flash-памяти.5. Использовать команду MOVX для записи байта данных в любую ячейку внутри 512-байтного сектора,который таким образом будет стерт.6. Сбросить в 0 бит PSEE (PSCTL.1) для запрещения стирания Flash-сектора7. Использовать команду MOVX для записи байта данных по нужному адресу внутри стертого 512-байтногосектора.
Повторять этот байт до тех пор, пока все необходимые байты не будут записаны (внутри данногосектора).8. Сбросить в 0 бит PSWE (PSCTL.0) для перенаправления действия команд MOVX на пространство памятиданных XRAM.9. Разрешить прерывания.169Ред. 1.3C8051F040/1/2/3Управление временными интервалами операций записи и стирания осуществляется автоматическиаппаратными средствами.
Во время программирования или стирания Flash-памяти выполнение программыприостанавливается. Следует иметь в виду, что 512-байтный сектор с адресами 0xFE00 – 0xFFFFзарезервирован и операции записи/стирания этого сектора недопустимы.Таблица 15.1. Электрические параметры FLASH-памятиVDD = 2.7 - 3.6В, Т = -40ºC … +85ºC, если не указано иное.ПАРАМЕТРУСЛОВИЯМин.Число циклов программирования20000Время цикла стирания10Время цикла записи40Тип.1000001250Макс.1460Ед. изм.Стирание/Записьмсмкс15.2. Долговременное хранение данныхFlash-память может использоваться не только для программного кода, но и для долговременногохранения данных.
Это позволяет рассчитывать и сохранять во время выполнения программы такие данные, каккалибровочные коэффициенты. Данные записываются с использованием команды MOVX (как описано впредыдущем разделе) и считываются с использованием команды MOVC.МК данного семейства содержат дополнительный 128-байтный сектор Flash-памяти, предназначенныйдля долговременного хранения данных.
По причине небольшого размера этого сектора его особенно выгодноиспользовать в качестве долговременной сверхбыстродействующей памяти общего назначения. Несмотря на то,что во Flash-память можно записывать по одному байту за раз, сначала необходимо стереть весь сектор. Чтобыизменить один байт в многобайтном наборе данных, необходимо поместить данные на временное хранение вкакую-либо память. После того, как сектор стерт, данные обновляются и возвращаются в исходный сектор.
128байтный размер сектора позволяет организовать процесс обновления данных без расходования пространствапамяти программ или ОЗУ. Этот 128-байтный сектор отображен (в режиме дублирования) на 64-КбайтнуюFlash-память и занимает диапазон адресов 0x00 - 0x7F (см. рис.15.1). Доступ к этому 128-байтному секторувозможен только тогда, когда бит SFLE регистра PSCTL установлен в 1. Выполнение программного кода изэтого 128-байтного сектора сверхоперативной памяти не допускается.15.3. Защита FLASH-памятиCIP-51 имеет опции защиты, позволяющие защитить Flash-память от случайной модификации состороны программы и исключить возможность просмотра патентованного программного кода и констант.
Битыразрешения записи памяти программ (PSCTL.0) и разрешения стирания памяти программ (PSCTL.1) защищаютFlash-память от случайной модификации со стороны программы. Эти биты должны быть явно установлены в 1,чтобы программа могла модифицировать или стирать Flash-память. Дополнительные функции защитыпредотвращают чтение и изменение патентованного программного кода и констант посредством JTAGинтерфейса или программы, запущенной на системном контроллере.Установка байтов блокировки защиты по адресам 0xFDFE и 0xFDFF защищает Flash-память от чтенияи изменения посредством JTAG-интерфейса. Каждый бит в байте блокировки защиты защищает один8-Кбайтный блок памяти.
Сброс бита в 0 в байте блокировки чтения защищает соответствующий блок Flashпамяти от чтения посредством JTAG-интерфейса. Сброс бита в 0 в байте блокировки записи/стираниязащищает блок от записи и/или стирания посредством JTAG-интерфейса. 128-байтный секторсверхоперативной памяти блокируется только тогда, когда заблокированы все другие секторы.Байт блокировки чтения находится по адресу 0xFDFF. Байт блокировки записи/стирания находится поадресу 0xFDFE. На рис.15.1 показано, какую область памяти защищает каждый бит байтов защиты.512-байтный сектор, содержащий байты защиты, можно программно записывать, но нельзя программностирать.
Операция чтения заблокированных для чтения байт возвратит в качестве результата неопределенныеданные. Отладка кода в заблокированном для чтения секторе с помощью JTAG-интерфейса невозможна.Ред. 1.3170C8051F040/1/2/3Рисунок 15.1. Карта распределения Flash-памяти программ и байты защитыБиты защиты чтенияи записи/стирания(бит 7 – старший)БитБлок памяти765432100xE000 - 0xFDFD0xC000 - 0xDFFF0xA000 - 0xBFFF0x8000 - 0x9FFF0x6000 - 0x7FFF0x4000 - 0x5FFF0x2000 - 0x3FFF0x0000 - 0x1FFFSFLE = 0SFLE = 10xFFFFЗарезервировано0xFE00Байт блокировки чтения0xFDFFБайт блокировкизаписи/стирания0xFDFEСверхоперативная память(только данные)0x007F0x00000xFDFDАдресное пространствопамяти программ/данныхГраница области, доступнойдля чтения из программы0x0000Байт блокировки чтения FLASH-памятиБиты 7-0: Каждый бит блокирует соответствующий блок памяти (бит 7 - старший).0: Операции чтения через JTAG-интерфейс для соответствующего блока заблокированы (запрещены).1: Операции чтения через JTAG-интерфейс для соответствующего блока разблокированы(разрешены).Байт блокировки записи/стирания FLASH-памятиБиты 7-0: Каждый бит блокирует соответствующий блок памяти.0: Операции записи/стирания через JTAG-интерфейс для соответствующего блока заблокированы(запрещены).1: Операции записи/стирания через JTAG-интерфейс для соответствующего блока разблокированы(разрешены).ПРИМЕЧАНИЕ: Когда заблокирован самый старший блок памяти, байты защиты можно записывать,нельзя стирать.Регистр ограничения доступа к FLASH-памяти (FLACL)Содержимое этого регистра используется как старший байт 16-разрядного адреса границы области,доступной для чтения из программы.
Значение этого 16-разрядного адреса рассчитывается как 0xNN00,где NN заменяется содержимым регистра FLACL при сбросе. Программе, запущенной на выполнение вадресном пространстве выше этого адреса (т.е. в верхнем разделе), запрещено использовать командыMOVX или MOVC для чтения, записи или стирания ячеек области памяти, расположенной ниже этогоадреса (т.е. в нижнем разделе). Любая такая попытка прочитать ячейки памяти из нижнего разделавозвратит в качестве результата 0x00.Биты блокировки всегда могут быть прочитаны и сброшены в 0 независимо от параметров защитыблока, содержащего байты защиты. Это позволяет защитить дополнительные блоки уже после того, как былзащищен блок, содержащий байты защиты.
Примечание: Однако, единственный способ удалить однаждыустановленную защиту – стереть все пространство памяти программ, используя операцию стиранияJTAG-интерфейса (т.е. нельзя сделать этого из программы пользователя). Обращение к любому байтузащиты во время выполнения операции JTAG-стирания автоматически инициирует стирание всегопространства памяти программ (за исключением зарезервированной области). Эта операция стиранияможет быть выполнена только через JTAG-интерфейс.
Если в процессе операции стирания происходитобращение к байту на странице 0xFBFF-0xFDFF, который не является байтом защиты, то будет стерталишь эта страница (включая байты защиты).171Ред. 1.3C8051F040/1/2/3Ограничение доступа к Flash-памяти (см.