ATmega의 새로운 "PB"변형은 브라운 아웃 검출기에 버그가 있습니까?


9

우리는 많은 제품에서 ATmega48 / 88 / 168 / 328 마이크로 컨트롤러를 수년 동안 성공적으로 사용해 왔습니다. 우리는 이제 A 및 PA 변형을 새로운 PB 변형으로 전환하는 것을 고려했습니다 (새 제품에는 추가 핀, 타이머 및 UART가 필요하기 때문에 저렴 해졌고 기존 변형이 중단 된 것처럼 보이기 때문에). ATmega328PB를 사용하여 ATmega328A를 교체했습니다. 정전 후에 매우 빈번하게 연결되는 것 같습니다 . 이전 버전에서는 이러한 문제가 발생하지 않았습니다.

당사 제품의 사용 사례에서 정기적 인 정전이 일반적입니다. 우리는 (같은 스위칭 전원 공급 장치 사용 이 하나를 5V로 설정)하고, ATMEGA의 VCC에 220μF 범위에서 커패시터를 가지고, 임무하지 않은 내부 상태를 저장하는 데 몇 분 정도의 범위에서 전원 중단을 위해 살아 SRAM을 유지 중요하지만 다시 시작할 때 즉시 사용할 수 있으므로 사용자 환경이 크게 향상됩니다 (이러한 상태는 EEPROM을 부적합하게 만들 정도로 자주 변경됩니다). 이것은 항상 효과가 있었다.

그러나 새로운 ATmega328PB를 사용하면 전원 중단 후 칩이 MCUSR에서 리셋 조건을 찾지 않고 리셋되며 클럭이 사라지는 것처럼 보입니다.

  • 브라운 아웃 감지기는 퓨즈마다 설정됩니다. 우리는 가능한 모든 보드 레벨을 시도했지만 버그는 그들 모두에서 발생합니다.
  • 외부 20MHz를 사용하며 퓨즈 당 올바르게 설정되어 있습니다.
  • 우리는 3 개의 서로 다른 칩을 시험해 보았으므로 단일 납땜이나 다른 하드웨어 고장이 아닙니다.

버그가 발생한 후 클럭은 종종 2.5 배 더 느린 속도로 설정되어 mcu가 8MHz 내부 오실레이터에 의해 클럭킹되고 있음을 나타냅니다. 그러나 때로는 둔화가 약 6 배입니다. 이것은 소프트웨어에서 퓨즈를 설정할 수 없으며 클럭 분배기가 클럭을 2.5 또는 6으로 나눌 수 없기 때문에 클럭 분배기를 변경하는 소프트웨어 버그가 될 수 없음을 의미합니다.

그래서 첫 번째 용의자는 새로운 Clock Failure Detection 퓨즈입니다. 그러나 켜져 있거나 꺼져 있더라도 동작은 동일하게 유지됩니다.

소프트웨어 특성을 배제하기 위해 타이머 테스트에서 100Hz로 출력을 토글하는 것 외에 다른 테스트 프로그램을 처음부터 작성했습니다. 매번 재시작 한 후 재설정 조건이 활성화 된 MCU를 MCUSR에서 읽습니다. 나머지 하드웨어도 제거되었으며 mcu와 레귤레이터 만 있습니다 (및 직렬 저항이있는 표시기 LED).

결과

대략 2/3의 시간, 흥미로운 것은 없습니다. 전원 중단 후 mcu는 작업을 다시 시작하며 브라운 아웃 재설정 및 전원 켜기 재설정 표시등이 모두 켜집니다.

(이미지에서 빨간색은 토글 된 핀이고 파란색은 VCC입니다.이 이미지에서 2.7V 브론 출력이 명확하게 보입니다. 다른 브라운 아웃 설정과 동일한 테스트를 수행하면 결과가 정확히 동일합니다. 그래서 나는 그 사진을 생략합니다)

그것은 잘 다시 시작

전원이 다시 때 대략 시간의 1/3, 상기 버그가 발생하고, 아무도 브라운 - 아웃 리셋 리셋 지표 전원에의는 점등되지 않습니다! 마치 MCU가 이상한 시계로 똑딱 거리는 것처럼 출력이 다릅니다. 혼란 스럽지는 않지만 같은 빈도로 계속 똑딱 거리고 있습니다.

미친 상태에서 다시 시작

흥미롭게도,이 상황에서 브라운 아웃 감지기는 완전히 작동하지 않는 것 같습니다. 다음 번 정전이 발생한 후 (정확한 클럭이 때때로 복원되는 경우도 있음), 브라운 이후에도 출력이 계속 잘 돌아가는 것을 알 수 있기 때문입니다. 아웃 레벨이 통과되었습니다. 이러한 상황에서 시계는 때때로 빨라지고 다른 경우에는 느려집니다.

브라운 아웃 없음, 시계가 더 빨라짐 브라운 아웃 없음, 시계가 느려짐

이 테스트 중에 시작 지연에 16K CK / 14CK + 4.1ms를 사용했지만 65ms 지연은 문제를 피하지 못합니다.

다음은 VCC가 2ms 미만의 5V에서 안정적인 상태에 도달 한 것을 분명히 볼 수있는 확대 그림입니다.

성공적인 시작, 확대

위 그림에서 mcu가 올바르게 시작되었습니다.

흥미롭게도 전원이 공급되지 않으면 공급 전압이 더 빨리 5V까지 안정적으로 유지됩니다 (mcu의 많은 부분이 켜지지 않아 시동 중에 전류를 덜 소비 함)

아래는 실패한 시작의 이미지입니다.

실패한 시작, 확대

전원 전압이 안정화 된 후 소프트웨어가 달리 필요한 10.5ms 대신 85ms 이상 후에 소프트웨어가 실행되기 시작합니다. 시동 지연의 퓨즈는 여전히 동일합니다 (16K CK / 14CK + 4.1ms).

흥미로운 점은 전원이 꺼진 후 VCC가 1.1 ~ 1.2V로 안정화된다는 점입니다 (구형 ATmega328A 변형은 약 0.6-0.7V로 떨어짐). 몇 분 동안 유지합니다. 30 분 이상 기다릴 경우 mcu는 항상 올바르게 시작됩니다! 따라서 문제는 1.1 볼트가 주변에 있다는 것입니다. 데이터 시트에 따르면 전원 켜기 재설정에 충분하지 않을 수도 있습니다. 그러나 브라운 아웃 재설정에 충분해야합니다!

이러한 상황을 제외하고 브라운 아웃 감지기는 정상적으로 작동합니다. 첫 번째 이미지에서 볼 수 있습니다 (보드 레벨에 도달하면 출력 신호가 중지되고 MCU의 일부가 종료됨에 따라 전압 강하가 느려집니다). VCC를 보드 레벨보다 약간 아래로 낮추고 다시 다시 올렸을 때 테스트를 수행했으며, 브라운관 리셋 표시등 만 켜진 상태에서 mcu가 항상 이러한 조건에서 올바르게 다시 시작되었습니다.

내가 명백한 것을 놓쳤습니까, 아니면 ATmega328PB의 브라운 아웃 검출기에 심각한 버그가 있습니까?

편집하다:

흥미롭게도, 위의 문제는 레귤레이터 전에 전원을 차단할 때만 발생합니다. 레귤레이터 다음에 중단하거나 실험실 전원 공급 장치를 사용하면 문제가 발생하지 않습니다. 상승 전압의 모양이 문제를 일으킨 것처럼. 그러나 마지막 이미지에서 볼 수 있듯이 전압 상승은 매우 좋으며 빠르게 안정화됩니다.

편집 2

나는 20 MHz 대신 16 MHz로 시도했지만 정확히 같은 문제가 발생합니다.


Atmel에 연락했거나 정오표를 살펴 보셨습니까? 이 시대에는 IC 설계 실수가 일반적입니다.
Edgar Brown

나는 정오표를 살펴 보았고 (이 방향으로 아무것도 찾지 못했습니다) Atmel과의 접촉을 고려하고 있지만 더 많은 테스트를하고 조금 더 둘러보기 전에는 아닙니다.
vsz

3
내 경험으로는 제조업체에 연락하거나 포럼을 사용하기 전에 시간을 낭비하지 마십시오. 매우 강력한 경우를 제시하기에 충분한 디버깅을 수행했습니다. 그보다 훨씬 적은 시간으로 TI는 우리의 문제를 문서화 한 IC 중 하나에 대한 내부 (미공개) 정오표를 보냈습니다.
Edgar Brown

내 2 센트 가치 : 전력이 너무 빨리 상승하면 다른 CPU에 문제가있는 것을 보았다. 일부 제조업체는 최대 상승 시간을 지정하지만 더 자주 언급되지 않습니다.
Oldfart

답변:


3

나는 그것이 브라운 아웃 감지기의 버그라고 생각하지 않지만 칩을 사용하는 방법.

스스로 말했듯이 전원을 간단히 제거하고 연결하면 전원 켜기 재설정 임계 값 1.1V에 도달하지 않으므로 POR이 없습니다.

브라운 아웃 감지기는 여기서도 도움이되지 않습니다. 20MHz에서 AVR을 사용하고 있으며 공급 전압이 4.5V 이상이어야하거나 사양을 위반하고 있습니다. BOD는 4.5V에서 트립 될 것이라고 보장하지 않습니다. 일반적으로 4.3V보다 낮습니다. 따라서 BOD가 트리거되기 전에도 AVR이 어떤 상태에서 종료되는지에 대한 보장은 없지만 BOD는 트리거 할 수 있습니다. 20MHz 클럭으로 인해 작동하지 않습니다. 전압이 다시 상승하기 시작하면 공급 전압이 다시 안전한 4.5V 레벨에 도달하기 전에 BOD가 비활성화됩니다. 올바르게 트리거 된 경우 그런 다음 시동 지연 시간은 내부 리셋이 해제되기 전에 전압이 BOD 비활성화 레벨에서 4.5V로 상승 할 정도로 충분히 높아야합니다.

그러나 20MHz에서 실행하려면 4.5V 이상이 필요하기 때문에 모든 것이 실패 할 수 있습니다. AVR 데이터 시트에 따르면 내부 리셋 시스템이 적합하지 않은 경우 외부 리셋 칩을 사용하는 경우 전압이 4.5V로 떨어지기 전에 AVR을 재설정하는 문제를 해결하는 것으로 보입니다.


BOD는 프로세서 자체를 사용하지 않지만 전용 하드웨어라고 가정했습니다. 어쩌면 그들은 PB 변형을 위해 그것을 바꿨 을까요? 그들이 더 이상 20 MHz에 대한 BOD를 지원하지 않으면 놀랄 것입니다. 가장 높은 보드 레벨은 4.3V이므로 20MHz에는 외부 BOD가 필요합니까? 아직도, 나는 이것 만이 원인이라고 의심합니다. 20MHz, 2.7V 보드 레벨로 테스트하고 VCC를 3V로 설정했는데 정상적으로 작동했습니다. 수동으로 전압을 2.7 아래로 약간 낮추면 출력이 중단되었습니다. 2.7 이상으로 높이면 출력이 다시 시작됩니다. 1.1V에서 시작한 경우에만 BOD가 비활성화 된 것 같습니다.
vsz

대부분 전용 하드웨어이지만 BOD가 시작되기 전에 저전압 상태에서 CPU 실행을 위해 플래시에서 올바른 데이터를 가져오고 CPU가 올바르게 실행하는지 확인할 수 있습니까? 지정되지 않은 것을 수행하는 예약 레지스터에 임의의 데이터를 쓰거나 그냥 쓸 수 있습니다. PB 변형에 대한 사양이 변경되었으며 구형 칩에서도 20MHz에 대한 BOD를 지원하지 않았습니다. PB 변형은 실제로 BOD와 POR 곡선이 서로 다르며 더 낮은 전압에서 나중에 시작됩니다.
Justme

두 번째 사진을 보시기 바랍니다. BOD가 올바르게 작동하여 칩을 재설정했습니다. 다음에 시작할 때만 초기화에 실패합니다. 또한이 칩을 3V로 구동했으며 올바르게 작동했으며 한 번도 실패하지 않았습니다.
vsz

제 생각에는 칩이 안전한 작동 영역 밖에서 작동 할 필요는 없지만 계속합시다. BOD는 Clock Failure Detector를 재설정하지 않으므로 전원 켜기 재설정 및 외부 재설정 만 내부 시계에서 전환됩니다. CFD 퓨즈 설정을 다시 확인하십시오. 외부 크리스탈 또는 외부 시계를 사용하고 있습니까? CFD 퓨즈는 이전에 Full Swing 퓨즈였습니다. 풀 스윙 퓨즈가 없으므로 크리스털의 최대 주파수는 16MHz이며 20MHz에는 외부 로직 레벨 클록 신호가 필요합니다. 크리스탈 스타트 업 문제 일 수도 있으므로 크리스탈 핀에도 적용 할 수 있습니다.
Justme

크리스탈을 사용합니다. 좋은 생각입니다. CFD가 켜져 있거나 꺼져 있더라도 이미지로 묘사 한 것과 동일한 동작이 발생했습니다.
vsz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.