Как отличить холодную загрузку от горячей загрузки на процессоре ARM?

StackOverflow https://stackoverflow.com/questions/3730464

  •  03-10-2019
  •  | 
  •  

Вопрос

Я ищу способ определить, загружается ли процессор ARM при холодной загрузке (т.первоначальное включение) по сравнению с «горячей» загрузкой (т. е. с «горячей» загрузкой).утверждение сброса без фактической потери мощности).В частности, я использую ядро ​​ARM968, буду выполнять определение с помощью C или сборки, и я буду использовать определение, чтобы определенные операции выполнялись только при первоначальном включении питания, а не при последующих сбросах.В предыдущих проектах я использовал внешние схемы (например,FPGA) для обнаружения различных сценариев загрузки, но в данном случае я ограничен ядром ARM.

Это было полезно?

Решение

Вы можете инициализировать глобальную переменную в ОЗУ значением, которое маловероятно при холодной загрузке, и проверять его во время загрузки.

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

Другие советы

Проверьте документацию для вашего конкретного чипа («ARM968» недостаточно конкретен).Должен быть регистр, описывающий причину сброса.Например.вот что есть у LPC23xx:

Reset Source Identification Register (RSIR - 0xE01FC180)

This register contains one bit for each source of Reset. Writing a 1 to any of these bits
clears the corresponding read-side bit to 0. The interactions among the four sources are
described below.

Bit Symbol Description
0 POR Assertion of the POR signal sets this bit, and clears all of the other bits in
this register. But if another Reset signal (e.g., External Reset) remains
asserted after the POR signal is negated, then its bit is set. This bit is not
affected by any of the other sources of Reset.
1 EXTR Assertion of the RESET signal sets this bit. This bit is cleared by POR,
but is not affected by WDT or BOD reset.
2 WDTR This bit is set when the Watchdog Timer times out and the WDTRESET
bit in the Watchdog Mode Register is 1. It is cleared by any of the other
sources of Reset.
3 BODR This bit is set when the 3.3 V power reaches a level below 2.6 V.
If the VDD(DCDC)(3V3) voltage dips from 3.3 V to 2.5 V and backs up, the
BODR bit will be set to 1.
If the VDD(DCDC)(3V3) voltage dips from 3.3 V to 2.5 V and continues to
decline to the level at which POR is asserted (nominally 1 V), the BODR
bit is cleared.
if the VDD(DCDC)(3V3) voltage rises continuously from below 1 V to a level
above 2.6 V, the BODR will be set to 1.
This bit is not affected by External Reset nor Watchdog Reset.
Note: Only in case when a reset occurs and the POR = 0, the BODR bit
indicates if the VDD(DCDC)(3V3) voltage was below 2.6 V or not.

Вероятно, это будет сложно, и, возможно, вы имеете в виду не только само ядро.Ядро должно было получить сброс, а вот внешняя память (но, возможно, все еще внутри чипа) — нет.если память основана на оперативной памяти, она все равно может быть очищена при загрузке.Я не знаю универсального ответа, подходящего всем.Однако он есть и у вас, и у starblue, вам нужно найти где-то какой-то регистр, который не очищается при сбросе, установить для него что-то, что «вероятно» не произойдет случайно при включении питания.прочитайте его, затем установите его.думает, что fpga или pld, которые управляют логикой сброса на уровне платы (если таковая имеется), являются лучшими, потому что при включении питания они также сбрасываются, а при теплом сбросе они являются причиной этого и сохраняют свое состояние .

покопайтесь в TRM вашего ядра или в спецификации регистров для чипа и посмотрите, есть ли какие-нибудь регистры, состояние сброса которых не определено, тот, который вы обычно не используете и который не повредит чип, если вы установите для него что-то, и посмотрите, что он включается, и я бы начал искать именно с него.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top