Здравствуйте всем! Работаю с stm32Lxx. Обращаю на это внимание, т.к., например, в отличие от 100-й линейки в нем нет некоторых "нужных" регистров, например, flash_cr. Запустил абсолютно все по SWD (правда долблю его имеюшейся железкой на atmege (с которых как раз и спрыгиваю): стираю, шью прошивку, устанавливаю защиту от чтения (Level 1). Так вот как раз с последним засада... вернее, установить то защиту могу, а вот снять ее не получается. Еще вернее: снять защиту получается, но после установки RDP в 0xAA обязательно приходится пересбрасывать питание на чипе (по ресету во FLASH_OBR так и остается информация о защите... или ресет не производится). По пунктам (вкратце): Установка защиты от чтения: 1. заливаю прошивку 2. разлочиваю Option Bytes 3. пишу (по адресу 0x1FF80000) 0xffff0000 - установка Level1 В отличие от StdLib пишу 0x00 а не 0xBB. 4. устанавливаю бит OBL_LAUNCH. сразу происходит сброс чипа. 5. для порядку устанавливаю lock на доступ к Option Bytes (хотя чип сбросился до этого). Все нормально: наблюдаю мигание светодиода в только что залитой прошивке. Снятие защиты от чтения: 1. устанавливаю связь с чипом по SWD 2. смотрим FLASH_OBR. да, стоит Level1. 1. разлочиваю Option Bytes 2. пишу (по адресу 0x1FF80000) 0xff5500aa - установка Level0 3. устанавливаю бит OBL_LAUNCH. думаю, происходит сброс чипа... светодиод уже не мигает... прошивку то загубили только что 4. для очистки совести устанавливаю lock на доступ к Option Bytes (хотя чип сбросился до этого... надеюсь). 5. делаю паузу... секунд 30. мало ли, что ему надо. 6. вновь устанавливаю связь с чипом по SWD 7. смотрим FLASH_OBR. Опа! До сих пор стоит Level1. Возникает мысль: а может защита не снялась? Нет, снялась. Стоит передернуть питание, и при чтении FLASH_OBR вижу в его младших разрядах заветные 0xAA. К слову: ST-LINKу пересброс питания таргета не требуется: после снятия защиты от чтения он продолжает работать с чипом (читает его очищенную память, льет прошивку и т.д.) Почему я обратил внимание на отличие от 100-х: в них есть понятие "стереть Option Byte". В 32L я этого не нашел (хотя в мануалах именно на 32L такое понятие употребляют). В StdLib на 32L также нет ничего необычного: все уровни от 0 до 2 устанавливаются абсолютно одинаково. Что же сделать, чтобы не приходилось пересбрасывать питание на таргете? Заранее всем спасибо.
|