AVR 플래시 메모리 손상


11

이 질문은 AVR 프로그래밍 자체 와 관련이 있습니다 .

프로젝트 정보 :
ATMEGA644P를 사용하는 배터리 전원 제품이 있습니다. 애플리케이션은 영구적으로 휴면 모드로 실행되며 1 초에 한 번 (RTC) 또는 두 개의 외부 인터럽트 라인 중 하나가 트리거 될 때만 웨이크 업됩니다.

이 장치에는 RS232 인터페이스 IC를 사용하여 UART를 통해 통신하는 매우 간단한 부트 로더가 있습니다. 하드웨어 ISP 프로그래머가 필요하지 않도록 펌웨어를 업데이트하는 편리한 방법입니다. (부트 로더는 체크섬 보안 텔레 그램을 기대합니다)

이 장치는 전력 소비를 두 배로 늘리고 긴 배터리 수명이 필수적이기 때문에 내부 브라운 아웃 비활성화로 설계되었습니다 (재 설계가 작동중인 외부 브라운 아웃 감지를 사용해야 함).

문제 :
몇 달에 한 번 장치 작동이 중지되고 해당 장치에서 펌웨어 업데이트가 수행되지 않았습니다. 그러나 추가 검사 후 해당 장치의 플래시 내용이 손상된 것 같습니다. 또한 일부 장치의 배터리는 여전히 좋았지 만 어떤 종류의 저전압 상황을 배제하고 싶지 않습니다.

원본 플래시 내용 (왼쪽)과 손상된 내용 (오른쪽)을 비교 한 것입니다.

플래시 비교

일부 관찰 :

  • 손상된 블록은 항상 하나 이상의 플래시 페이지 (256 바이트)로 구성되며 페이지 정렬됩니다. 다시 말해, 단일 바이트가 아닌 전체 페이지 만 영향을받습니다.
  • 손상된 콘텐츠는 대부분 0xFF를 읽지 만 다른 값을 포함하거나 완전히 "무작위"일 수도 있습니다.
  • 이미지 왼쪽의 작은 막대에는 영향을받는 모든 영역이 표시됩니다. 이 장치의 경우 총 플래시 내용의 약 10 분의 1입니다.
  • 한 페이지 만 영향을받는 장치가 하나있었습니다.

플래시 메모리를 쓰는 동안 저전압 상태가 플래시 내용을 손상시킬 수 있다는 것은 그럴듯합니다. 그러나 이는 일부 플래시 감지 명령어를 실행해야 함을 의미합니다.

저전압으로 인해 컨트롤러가 임의로 재시작되고 부트 로더 코드가이 시간 동안 완전히 예측할 수없는 상태 일 수 있습니다. 저전압에 관한 다른 포럼에서 어떤 사람을 인용하려면 :

"플래시가 실행되는 임의의 명령 일뿐만 아니라 임의의 명령 기간 (플래시의 코드가 올바르게 읽히고 해석 될 것이라는 보장은 없습니다). 이와 함께 MCU의 다른 부분은 보호 기능을 포함하여 설계된대로 동작하지 않을 수 있습니다. 메커니즘. "

질문 : "전압 부족 상태에서 임의의 동작을 수행하고 플래시 페이지에서 데이터를 변경하는 일부 명령을 실행하는 중"
이라고 생각하십니까 ? 이 경우 일부 소프트웨어 문제 (스택 오버플로, 잘못된 포인터)의 원인으로 이러한 종류의 오류가 항상 발생하지 않는 이유는 무엇입니까?

이런 종류의 부패를 일으킬 수있는 다른 아이디어가 있습니까? EMI / ESD로 인해 발생할 수 있습니까?


예제의 두 번째 블록에서 비트가 1-> 0에서 시작했거나 모두 0-> 1 전환 되었습니까? 이것을 계산하는 스크립트가 있지만 스크린 샷에서 모든 숫자를 입력하지는 않습니다.
markrages

@markrages : 그것을 보았을 때, 0-> 1 만. 하나의 대답은 또한 모든 비트가 1로 뒤집 히지 않은 부분 소거처럼 보인다고 지적했다. 관찰 해 주셔서 감사합니다.
Rev1.0

답변:


11

플래시가 기록되지 않고 지워지는 것을 알 수 있습니다. 삭제 된 플래시는 0xFF로 가득 차 있습니다. 첫 번째 256 바이트는 완전히 지워지고 세 번째 256 바이트 영역은 부분적으로 지워집니다 (올바른 데이터에서 손상된 비트 맵까지는 0에서 1 비트 만 있습니다).

데이터 시트 에 따르면 ,이 플래시는 페이지를 지울 수 있습니다 (일반적으로 페이지보다 큰 지우기 블록으로 작업합니다). 282 페이지에서 볼 수 있듯이 SPM으로 페이지 지우기 수행은 매우 쉽습니다.

23.8.1 절 (플래시 손상 방지)에 관심이있을 수 있습니다.

전압이 너무 낮은 두 가지 상황으로 인해 플래시 프로그램 손상이 발생할 수 있습니다. 첫째, 플래시에 규칙적인 쓰기 순서를 수행하려면 최소 전압이 필요합니다. 둘째, 명령 실행을위한 공급 전압이 너무 낮 으면 CPU 자체가 명령을 잘못 실행할 수 있습니다. 다음 설계 권장 사항을 따르면 플래시 손상을 쉽게 피할 수 있습니다 (하나만으로 충분).

  1. 시스템에 Boot Loader 업데이트가 필요하지 않은 경우 Boot Loader 소프트웨어 업데이트를 방지하기 위해 Boot Loader Lock 비트를 프로그래밍하십시오.
  2. 전원 공급 장치 전압이 부족한 동안 AVR RESET을 활성 (낮음)으로 유지하십시오.
    작동 전압이 감지 레벨과 일치하는 경우 내부 BOD (Brown-out Detector)를 활성화하면됩니다. 그렇지 않은 경우 외부의 낮은 VCC 리셋 보호 회로를 사용할 수 있습니다. 기록 동작이 진행되는 동안 리셋이 발생하면 전원 전압이 충분하면 기록 동작이 완료된다.
  3. 낮은 VCC 기간 동안 AVR 코어를 전원 차단 절전 모드로 유지하십시오. 이렇게하면 CPU가 명령어를 해독하고 실행하지 못하게되어 SPMCSR 레지스터와 플래시를 의도 치 않은 쓰기로부터 효과적으로 보호 할 수 있습니다.

세 번째 페이지의 부분 지우기에 대한 관찰은 그럴듯 해 보입니다. Atmel 텍스트와 관련하여 : 우리는 모두 이사회가 의무적 인 것으로 보인다는 데 동의합니다. 그러나 나는 여전히 부패의 정확한 원인에 대해 확신하지 못한다. 컨트롤러가 플래시 페이지를 지우기 위해이 특정 명령을 (저전압으로 인해) 실행하는 것 같지 않습니까? 플래시가 쓰기 가능하기 때문에 부트 로더 코드 실행 중에도 발생해야합니다. 그리고 특정 순서가 필요합니다.
Rev1.0

3
정확한 손상 원인을 설명 할 수는 없습니다. Vcc가 떨어지면 하나의 트랜지스터를 다른 트랜지스터로 완전히 포화 시키기에는 너무 낮아집니다. MCU는 기본적으로 매우 큰 논리 방정식입니다. 트랜지스터가 논리 스위치로 작동하지 않으면이 방정식을 변경하십시오. 오작동하는 첫 번째 트랜지스터는 ASIC 웨이퍼 도핑 및 외부 전자기 섭동에 의존하기 때문에 어떤 일이 일어날 지 예측할 수 없습니다. 이 문제를 해결하기 위해 ASIC을 설계 할 때 오작동 전에 디지털 부품을 끄는 아날로그 부품을 추가 할 수 있습니다. 그러나 전체 ASIC 비용이 증가합니다.
Jacen

애플리케이션 노트 AVR180 외부 브라운 아웃 보호 상태를 혼동하는 경우 : "AVR® 내부 플래시 프로그램 메모리 내용은 전원 공급 장치 전압 부족으로 인한 영향을받지 않습니다." 또한 : "AVR CPU가 자체 프로그램 메모리에 쓸 수 없으므로 내부 플래시 프로그램 메모리 내용은 정전 상황의 영향을받지 않습니다." -IMO Atmel은 플래시 메모리를 변경해야하는 부트 로더와 같은 것이 있다는 것을 무시하고 있습니다.
Rev1.0

@ Rev1.0 글쎄요, 아마도 그럴 것 같지 않습니다. 그래서 모든 기기가 아닌 몇 달에 한 기기에서만 볼 수 있습니다.
user253751

"플래시 만 쓰기 가능하므로 부트 로더 코드 실행 중에도 이런 일이 발생해야합니다." -부팅 잠금 비트 ( BLB01및 친구)가 적절하게 설정된 경우에만 해당됩니다 ! 그들은? "혼동 ... 응용 참고 사항 ..." -응용 참고 사항은 신뢰할 수 없습니다. 영감을 위해서만 사용하십시오. 보증을 위해 데이터 시트 (무책임한 것이 아니라 헤이)에 의존하십시오.
marcelm

4

이것은 잘 알려진 문제이며 많은 마이크로 컨트롤러 (Atmel만이 아니라)에 영향을 미칩니다. 플래시 메모리 제어 하드웨어는 저전압 조건에서 메모리의 일부를 손상 시키거나 지 웁니다. 간단한 수정은 브라운 아웃 보호를 활성화하는 것입니다.

물론 마이크로 컨트롤러에서 항상 브라운 아웃 보호를 활성화해야합니다.


3
HOW 및 WHY "메모리 제어 하드웨어가 저전압 조건에서 메모리의 일부를 손상 시키거나 지 웁니다"에 대한 확실한 참조가 있습니까? 플래시 손상에 관한 포럼 토론이 많이 있지만 확실한 것은 아닙니다.
Rev1.0

인칩 저전압 문제이거나 AFAIK가 FLASH 만 수정할 수있는 부트 로더 섹션에서 프로그램의 잘못 / 무작위 실행과 관련이 있습니까? 두 번째 문제인 경우 FUSE를 통해 부트 로더 실행을 비활성화하면 문제가 해결됩니다.
TMa

나는 적어도 하나의 MEGA 마이크로의 정오표에서 그것에 대해 읽은 것을 기억합니다.
사용자

3

저전압이 원인 일 가능성이 높습니다. 예를 들어, 한때 1.8V의 브라운 아웃 레벨이 종종 손상을 일으키는 프로젝트가 있었으며, 이러한 손상은 3.5V의 브라운 아웃 레벨로 재현 될 수 없었습니다.

프로세서가 빠르게 실행 될수록 저전압 문제에 더 민감합니다. CPU 주파수를 낮추는 것이 사용 가능한 옵션이라면 시도해 볼 가치가 있습니다.


1
대답 해줘서 고마워요. 우리는 외부 초 저전력 브라운 아웃 검출기를 사용했으며 그 이후로 부패 문제가 없었습니다.
Rev1.0

0

PCB 설계의 주요 규칙을 따르지 않으면 EMC가 가장 큰 적입니다. 내 경험에서 가장 중요한 것들은 다음과 같습니다. 각 PCB의 레이어를 가능한 많이. 이러한 영역은 가능한 한 자주 비아를 통해 모든 층을 통해 접촉해야하며, 50mil의 그리드는 좋은 가치입니다. 해당 영역을 접지 신호에 연결하십시오. -PCB에 연결되지 않은 (부동, 신호 연결되지 않은) 구리를 두지 마십시오. 안테나처럼 작동하며 전자기 방사선을 장치에 비정형 적으로 배치합니다. 클록 신호를 가능한 짧게 전달하는 트레이스를 만듭니다.

"emc proof pcb 디자인 가이드"와 같은 검색 엔진 요청으로 자세한 내용 찾기

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.