Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Stenin Lab / C8051F60-67-устройство МК.pdf
Скачиваний:
154
Добавлен:
10.02.2015
Размер:
5.19 Mб
Скачать

C8051F060/1/2/3/4/5/6/7

16.3. Защита FLASH-памяти

CIP-51 имеет опции защиты, позволяющие защитить Flash-память от случайной модификации со стороны программы и исключить возможность просмотра патентованного программного кода и констант. Биты разрешения записи памяти программ (PSCTL.0) и разрешения стирания памяти программ (PSCTL.1) защищают Flash-память от случайной модификации со стороны программы. Эти биты должны быть явно установлены в 1, чтобы программа могла модифицировать или стирать Flash-память. Дополнительные функции защиты предотвращают чтение и изменение патентованного программного кода и констант посредством JTAGинтерфейса или программы, запущенной на системном контроллере.

Установка байтов блокировки защиты защищает Flash-память от чтения и изменения посредством JTAG-интерфейса. Каждый бит в байте блокировки защиты защищает один 8-Кбайтный блок памяти. Сброс бита в 0 в байте блокировки чтения защищает соответствующий блок Flash-памяти от чтения посредством JTAG-интерфейса. Сброс бита в 0 в байте блокировки записи/стирания защищает блок от записи и/или стирания посредством JTAG-интерфейса. 128-байтный сектор сверхоперативной памяти блокируется только тогда, когда заблокированы все другие секторы.

В МК C8051F060/1/2/3/4/5 байты блокировки защиты находятся по адресам 0xFBFE (байт блокировки записи/стирания) и 0xFBFF (байт блокировки чтения), как показано на рис.16.1. В МК C8051F066/7 байты блокировки защиты находятся по адресам 0x7FFE (байт блокировки записи/стирания) и 0x7FFF (байт блокировки чтения), как показано на рис.16.2. 512-байтный сектор, содержащий байты защиты, можно программно записывать, но нельзя программно стирать. Операция чтения заблокированных для чтения байт возвратит в качестве результата неопределенные данные. Отладка кода в заблокированном для чтения секторе с помощью JTAG-интерфейса невозможна. Биты блокировки всегда могут быть прочитаны и сброшены в 0 независимо от параметров защиты блока, содержащего байты защиты. Это позволяет защитить дополнительные блоки уже после того, как был защищен блок, содержащий байты защиты.

Важное примечание: Чтобы гарантировать защиту от внешнего доступа, необходимо заблокировать для операций записи/стирания блок памяти, содержащий байты блокировки. В 64Кбайтных МК (C8051F060/1/2/3/4/5) страница, содержащая байты защиты (0xFA00 – 0xFBFF), блокируется путем сброса в 0 бита 7 байта блокировки записи/стирания. В 32-Кбайтных МК (C8051F066/7) страница, содержащая байты защиты (0x7E00 – 0x7FFF), блокируется путем сброса в 0 бита 3 байта блокировки записи/стирания. Если страница, содержащая байты защиты, не заблокирована для операций записи/стирания, то, используя JTAG-порт, можно стереть эту страницу и сбросить байты защиты.

Если страница, содержащая байты защиты, заблокирована для операций записи/стирания, то для разблокирования любой области Flash-памяти, защищенной байтами защиты, необходимо стереть все пространство памяти программ, используя операцию стирания JTAG-интерфейса. Обращение к любому байту защиты во время выполнения операции JTAG-стирания автоматически инициирует стирание всего пространства памяти программ. Эта операция стирания может быть выполнена только через JTAG-интерфейс и не может быть выполнена из программы, запущенной на МК.

179

Ред. 1.2

C8051F060/1/2/3/4/5/6/7

Рисунок 16.1. Карта распределения Flash-памяти программ и байты защиты

(C8051F060/1/2/3/4/5)

Биты защиты чтения

SFLE = 0

 

 

SFLE = 1

 

и записи/стирания

 

 

0xFFFF

 

 

0x007F

 

 

 

Сверхоперативная память

(бит 7 – старший)

 

Зарезервировано

 

 

 

 

 

0xFC00

 

(только данные)

0x0000

Бит

Блок памяти

 

 

Байт блокировки чтения

0xFBFF

 

 

 

7

0xE000 - 0xFBFD

 

 

 

 

 

 

 

 

 

 

 

 

 

Байт блокировки

0xFBFE

 

 

 

6

0xC000 - 0xDFFF

 

 

 

 

 

 

записи/стирания

 

 

 

 

5

0xA000 - 0xBFFF

 

 

0xFBFD

 

 

 

 

 

 

 

 

 

4

0x8000 - 0x9FFF

 

 

 

 

Адресное пространство

 

3

0x6000 - 0x7FFF

 

 

 

 

памяти программ/данных

2

0x4000 - 0x5FFF

 

 

 

 

 

 

 

1

0x2000 - 0x3FFF

 

 

Граница области, доступной

 

 

 

 

 

 

 

 

для чтения из программы

 

 

 

 

0

0x0000 - 0x1FFF

 

 

 

 

 

 

 

 

 

 

 

 

0x0000

Байт блокировки чтения FLASH-памяти

Биты 7-0: Каждый бит блокирует соответствующий блок памяти (бит 7 - старший).

0:Операции чтения через JTAG-интерфейс для соответствующего блока заблокированы (запрещены).

1:Операции чтения через JTAG-интерфейс для соответствующего блока разблокированы (разрешены).

Байт блокировки записи/стирания FLASH-памяти

Биты 7-0: Каждый бит блокирует соответствующий блок памяти.

0:Операции записи/стирания через JTAG-интерфейс для соответствующего блока заблокированы (запрещены).

1:Операции записи/стирания через JTAG-интерфейс для соответствующего блока разблокированы

(разрешены).

ПРИМЕЧАНИЕ: Если заблокирован блок, содержащий байты защиты, то байты защиты можно записывать, но нельзя стирать.

Граница области, доступной для чтения из программы

Граница области памяти, доступной для чтения из программы, определяется содержимым регистра FLACL (см. рис. 16.3). Программе, запущенной на выполнение в адресном пространстве выше этого адреса (т.е. в верхнем разделе), запрещено использовать команды MOVX или MOVC для чтения, записи или стирания ячеек области памяти, расположенной ниже этого адреса (т.е. в нижнем разделе).

Ред. 1.2

180

C8051F060/1/2/3/4/5/6/7

Рисунок 16.2. Карта распределения Flash-памяти программ и байты защиты

(C8051F066/7)

Биты защиты чтения

SFLE = 0

 

 

SFLE = 1

 

и записи/стирания

 

 

0xFFFF

 

 

0x007F

 

 

 

Сверхоперативная память

(бит 7 – старший)

 

Зарезервировано

 

 

 

 

 

 

0x8000

 

(только данные)

0x0000

Бит

Блок памяти

 

 

Байт блокировки чтения

0x7FFF

 

 

 

7

Отсутствует

 

 

 

 

 

 

 

 

 

 

 

 

 

Байт блокировки

0x7FFE

 

 

 

6

Отсутствует

 

 

 

 

 

 

записи/стирания

 

 

 

 

5

Отсутствует

 

 

 

0x7FFD

 

 

 

 

 

 

 

 

 

4

Отсутствует

 

 

 

 

Адресное пространство

 

3

0x6000

- 0x7FFD

 

 

 

 

памяти программ/данных

2

0x4000

- 0x5FFF

 

 

 

 

 

 

 

1

0x2000

- 0x3FFF

 

 

Граница области, доступной

 

 

 

 

 

 

 

 

 

для чтения из программы

 

 

 

 

0

0x0000

- 0x1FFF

 

 

 

 

 

 

 

 

 

 

 

 

0x0000

Байт блокировки чтения FLASH-памяти

Биты 7-0: Каждый бит блокирует соответствующий блок памяти (бит 7 - старший).

0:Операции чтения через JTAG-интерфейс для соответствующего блока заблокированы (запрещены).

1:Операции чтения через JTAG-интерфейс для соответствующего блока разблокированы (разрешены).

Байт блокировки записи/стирания FLASH-памяти

Биты 7-0: Каждый бит блокирует соответствующий блок памяти.

0:Операции записи/стирания через JTAG-интерфейс для соответствующего блока заблокированы (запрещены).

1:Операции записи/стирания через JTAG-интерфейс для соответствующего блока разблокированы

(разрешены).

ПРИМЕЧАНИЕ: Если заблокирован блок, содержащий байты защиты, то байты защиты можно записывать, но нельзя стирать.

Граница области, доступной для чтения из программы

Граница области памяти, доступной для чтения из программы, определяется содержимым регистра FLACL (см. рис. 16.3). Программе, запущенной на выполнение в адресном пространстве выше этого адреса (т.е. в верхнем разделе), запрещено использовать команды MOVX или MOVC для чтения, записи или стирания ячеек области памяти, расположенной ниже этого адреса (т.е. в нижнем разделе).

Ограничение доступа к Flash-памяти (см. рис. 16.3) представляет собой функцию защиты, которая защищает патентованный программный код и данные от прочтения программой, запущенной на МК C8051F060/1/2/3/4/5/6/7. Эта функция обеспечивает поддержку ОЕМ-производителей, которые перед распространением МК желают запрограммировать их дополнительным программным обеспечением, являющимся собственностью фирмы. При этом фирменное программное обеспечение будет защищено, а в оставшееся пространство памяти программ можно позднее запрограммировать дополнительный код.

181

Ред. 1.2

C8051F060/1/2/3/4/5/6/7

Граница области, доступной для программного чтения (Flash Access Limit - FAL), представляет собой 16-битный адрес, который делит пространство памяти программ на два логических раздела. Первый из них является верхним разделом и состоит из всех ячеек памяти программ, находящихся выше адреса FAL (включая и сам адрес FAL). Второй является нижним разделом и состоит из всех ячеек памяти программ с адресами от 0x0000 до FAL адреса (не включая сам адрес FAL). Программа, запущенная в верхнем разделе, может исполнять код из нижнего раздела, но ей запрещено читать ячейки из нижнего раздела, используя команду MOVC. (Выполнение команды MOVC из верхнего раздела с адресом источника данных, указывающим на нижний раздел, всегда в качестве результата будет возвращать значение 0x00.) Программа, запущенная в нижнем разделе, может обращаться к ячейкам памяти как из верхнего, так и из нижнего разделов без ограничений.

Дополнительные встроенные фирменные программы следует размещать в нижнем разделе. При сбросе управление передается этим программам через вектор сброса. Как только завершится процесс начальной инициализации, произойдет переход по предопределенному адресу в верхнем разделе. Программа, запущенная в верхнем разделе, может выполнять программный код из нижнего раздела, если известны точки входа, но не может прочитать содержимое нижнего раздела. Программному коду, запущенному в нижнем разделе, параметры могут передаваться следующим образом:

-параметры размещаются в стеке до вызова программного кода из нижнего раздела;

-параметры размещаются в регистрах внутреннего ОЗУ до вызова программного кода из нижнего раздела;

-параметры размещаются в определенных ячейках памяти в верхнем разделе.

Адрес FAL задается в регистре ограничения доступа к Flash-памяти (FLACL). 16-разрядный FAL адрес вычисляется как 0xNN00, где NN представляет собой содержимое регистра FLACL. Таким образом, адрес FAL можно задать в любом месте пространства памяти программ на границах 256-байтных секторов. Однако, 512байтный размер сектора стирания требует использовать в качестве адреса FAL границы 512-байтных секторов. При сбросе в регистр FLACL по умолчанию записывается 0x00, устанавливая тем самым адрес FAL 0x0000 и разрешая доступ по чтению ко всем ячейкам памяти программ.

Рисунок 16.3. FLACL: Регистр ограничения доступа к Flash-памяти

R/W

R/W

R/W

R/W

R/W

R/W

R/W

R/W

Значение

 

 

 

 

 

 

 

 

при сбросе:

 

 

 

 

 

 

 

 

00000000

Бит 7

Бит 6

Бит 5

Бит 4

Бит 3

Бит 2

Бит 1

Бит 0

SFR Адрес: 0xB7

 

 

 

 

 

 

 

 

SFR страница: F

Биты 7-0: FLACL: Адрес границы программно-доступной области Flash-памяти.

Этот регистр содержит старший байт 16-разрядного адреса границы области памяти программ, доступной для операций чтения/записи/стирания. Значение полного 16-разрядного адреса ограничения доступа рассчитывается как 0xNN00, где NN заменяется содержимым регистра FLACL. Запись в этот регистр устанавливает адрес границы программно-доступной области Flash-памяти. Этот регистр может быть записан только один раз после сброса. Все последующие попытки записать этот регистр игнорируются до следующего сброса. Чтобы полностью защитить все ячейки памяти с адресами ниже этой границы,

необходимо сбросить в 0 бит 0 регистра FLACL; тогда адрес FAL совпадет границей 512-байтного сектора Flash-памяти.

Ред. 1.2

182