Apakah varian "PB" baru ATmega memiliki bug di detektor berwarna cokelat?

9

Kami telah menggunakan mikrokontroler ATmega48 / 88/168/328 dengan sukses selama bertahun-tahun di banyak produk kami. Kami sekarang telah mempertimbangkan untuk beralih dari varian A dan PA ke varian PB baru (karena kami akan membutuhkan pin, timer, dan UART tambahan dalam produk baru, karena itu menjadi lebih murah, dan karena tampaknya varian lama akan dihentikan), jadi kami mengganti ATmega328A dengan ATmega328PB. Tampaknya menjadi sangat sering setelah gangguan listrik . Masalah seperti itu tidak pernah terjadi dengan varian lama.

Gangguan daya biasa adalah normal untuk penggunaan produk kami. Kami menggunakan catu daya switching (seperti yang ini ) yang diatur ke 5V, dan memiliki kapasitor dalam kisaran 220μF pada Vme ATmega, untuk menjaga SRAM tetap hidup untuk gangguan daya dalam rentang beberapa menit, untuk menyimpan kondisi internal yang bukan misi kritis tetapi secara signifikan meningkatkan pengalaman pengguna dengan menjadi tersedia secara instan saat restart (status ini cukup sering berubah sehingga EEPROM tidak cocok). Ini selalu berhasil.

Namun, dengan ATmega328PB baru, setelah gangguan daya, chip ulang tanpa kondisi reset ditemukan di MCUSR, dan jam tampaknya menjadi kacau.

  • detektor berwarna kecoklatan disetel per sekering. Kami mencoba setiap bodlevel yang tersedia, bug terjadi pada mereka semua.
  • kami menggunakan 20 MHz eksternal, juga diatur dengan benar per sekering.
  • kami mencoba 3 chip berbeda, jadi itu bukan solder tunggal atau kegagalan perangkat keras lainnya.

Setelah bug terjadi, jam sering diatur ke kecepatan 2.5x lebih lambat, menunjukkan bahwa MCU sedang clock oleh osilator internal 8 MHz. Namun, terkadang penurunannya sekitar 6x. Ini berarti itu bukan bug perangkat lunak yang mengubah pembagi jam, karena saya tidak dapat mengatur sekering dari perangkat lunak, dan pembagi jam tidak dapat membagi jam dengan 2,5 atau 6.

Jadi, tersangka pertama saya adalah sekering Deteksi Kegagalan Jam baru. Namun, tidak masalah apakah itu dihidupkan atau dimatikan, perilaku tetap sama.

Untuk mengesampingkan kekhasan perangkat lunak, saya menulis program pengujian sederhana dari awal, yang tidak melakukan apa pun selain mengubah output dengan 100 Hz dari penghentian waktu, dan menunjukkan dengan LED setelah setiap restart yang kondisi reset diaktifkan (seperti membaca dari MCUSR). Sisa perangkat keras juga dihapus, hanya MCU dan regulator yang ada (dan indikator dipimpin dengan resistor seri).

Hasil

Sekitar 2/3 dari waktu, tidak ada yang menarik terjadi. Setelah gangguan daya, mcu melanjutkan pekerjaannya, indikator reset brown-out dan power-on reset menyala.

(pada gambar, merah adalah pin toggled, dan biru adalah VCC. Pada gambar ini, 2,7 V bronwn-out terlihat jelas. Saya melakukan tes yang sama dengan pengaturan brown-out lainnya, hasilnya persis sama, jadi saya akan menghilangkan gambar-gambar itu)

restart dengan baik

Kira-kira 1/3 dari waktu, bug yang disebutkan di atas terjadi, dan ketika daya kembali, tidak ada indikator reset berwarna coklat dan indikator reset daya menyala! Outputnya berbeda, seolah-olah MCU itu berdetak dengan jam aneh. Ini tidak kacau, namun terus berdetak dengan frekuensi yang sama.

itu restart dalam keadaan gila

Menariknya, dalam situasi ini, detektor berwarna cokelat tampaknya benar-benar tidak aktif, karena setelah gangguan daya berikutnya (di mana jam yang benar kadang-kadang dipulihkan, kadang-kadang tidak), jelas terlihat bahwa output terus beralih dengan baik setelah brown- level out telah dilewati. Dalam situasi seperti itu, jam terkadang menjadi lebih cepat, di waktu lain jam menjadi lebih lambat:

Jangan kecokelatan, jam semakin cepat Jangan kecokelatan, jam menjadi lebih lambat

Selama tes ini saya menggunakan 16K CK / 14CK + 4.1 ms untuk penundaan start-up (tetapi keterlambatan 65 ms tidak menghindari masalah).

Berikut adalah gambar yang diperbesar, di mana Anda dapat dengan jelas melihat bahwa VCC mencapai kondisi stabil pada 5 V di bawah 2 ms:

awal yang sukses, diperbesar

Pada gambar di atas, MCU dimulai dengan benar.

Menariknya, ketika tidak, tegangan suplai naik ke stabil 5 V bahkan lebih cepat (sepertinya banyak bagian MCU tidak menyala, sehingga menarik lebih sedikit saat ini saat startup)

Di bawah ini adalah gambar dari awal yang tidak berhasil:

awal yang gagal, diperbesar

Harap dicatat, bahwa perangkat lunak mulai berjalan setelah lebih dari 85 ms setelah tegangan suplai stabil, daripada 10,5 ms yang diperlukan sebaliknya. Sekering untuk penundaan startup masih sama, 16K CK / 14CK + 4,1 ms.

Yang juga menarik untuk dicatat, adalah bahwa setelah pasokan dimatikan, VCC menstabilkan sekitar 1,1 hingga 1,2 Volt (yang lama, varian ATmega328A turun menjadi sekitar 0,6 - 0,7 V). Itu menjaga itu selama beberapa menit. Jika saya menunggu cukup lama (dalam urutan setengah jam atau lebih), MCU selalu dimulai dengan benar! Jadi sepertinya masalahnya adalah ada sekitar 1,1 Volt di sekitar, yang, menurut datasheet, tidak dijamin cukup untuk reset power-on. Tapi itu harus cukup untuk reset brown-out!

Kecuali untuk situasi ini, detektor berwarna cokelat berfungsi dengan baik. Ini terlihat pada gambar pertama (sinyal output berhenti ketika bodlevel telah tercapai, dan penurunan tegangan melambat, karena bagian dari MCU dimatikan). Saya melakukan tes ketika saya mengurangi VCC sedikit di bawah bodlevel dan membiarkannya naik kembali, MCU selalu memulai kembali dengan benar dalam kondisi seperti itu, dengan hanya indikator reset berwarna cokelat yang menyala.

Apakah saya melewatkan sesuatu yang jelas, atau apakah ATmega328PB memiliki bug serius dalam detektor berwarna cokelatnya?

EDIT:

Menariknya, masalah di atas hanya muncul ketika saya mengganggu pasokan sebelum regulator. Jika saya menyela setelah regulator (atau menggunakan catu daya laboratorium), masalah tidak pernah terjadi. Seolah-olah bentuk naiknya tegangan menyebabkan masalah. Namun, seperti yang dapat Anda lihat dari gambar terakhir, kenaikan tegangan cukup bagus dan stabil dengan cepat.

EDIT 2

Saya mencobanya dengan 16 MHz bukannya 20 MHz, tetapi masalah yang sama persis terjadi.

vsz
sumber
Sudahkah Anda menghubungi Atmel atau memeriksa erratanya? Pada zaman ini kesalahan desain IC cukup umum.
Edgar Brown
Saya telah memeriksa erratas (tidak menemukan apa pun di arah ini), dan kami sedang mempertimbangkan untuk menghubungi Atmel, tetapi tidak sebelum melakukan beberapa tes lagi dan melihat-lihat sedikit lagi.
vsz
3
Menurut pengalaman saya, jangan buang waktu sebelum menghubungi pabrik atau menggunakan forum mereka. Anda telah membuat lebih dari cukup debugging untuk menyajikan kasus yang sangat kuat. Dengan jauh lebih sedikit dari itu, TI mengirim saya errata internal mereka (tidak dipublikasikan) untuk salah satu IC mereka yang mendokumentasikan masalah kami.
Edgar Brown
Nilai dua sen saya: Saya telah melihat masalah dengan CPU lain jika daya naik terlalu cepat. Beberapa produsen menentukan waktu kenaikan maksimum tetapi lebih sering ini tidak disebutkan.
Oldfart

Jawaban:

3

Saya tidak berpikir itu adalah bug dengan detektor berwarna cokelat, tetapi bagaimana Anda menggunakan chip.

Seperti yang Anda katakan sendiri, ambang reset power-on 1.1 V tidak tercapai jika daya hanya dihapus sebentar dan terhubung, sehingga tidak akan ada POR.

Detektor berwarna cokelat juga tidak banyak membantu di sini. Anda menggunakan AVR pada 20 MHz, dan ini membutuhkan tegangan suplai menjadi 4,5 V atau lebih, atau Anda melanggar spesifikasi. Dan BOD tidak menjamin bahwa itu akan melaju pada 4,5 V, itu biasanya kurang dari itu, katakanlah 4.3 V. Jadi bahkan sebelum BOD memicu, tidak ada jaminan dalam keadaan apa AVR berakhir tetapi BOD harus dipicu, kecuali bahwa hal itu mungkin memicu, tidak berfungsi karena jam 20 MHz Anda. Ketika tegangan mulai naik lagi, BOD dinonaktifkan sebelum tegangan suplai berada pada level aman 4,5 V lagi. Jika dipicu dengan benar. Waktu tunda start-up harus kemudian diatur ke cukup tinggi sehingga tegangan memiliki perubahan untuk naik dari tingkat penonaktifan BOD ke 4,5 V sebelum reset internal dilepaskan.

Tapi itu semua mungkin gagal karena hanya membutuhkan setidaknya 4,5 V untuk berjalan pada 20 MHz. Datasheet AVR tidak menyebutkan bahwa jika sistem reset internal tidak cocok maka gunakan chip reset eksternal, dan dalam hal ini sepertinya akan menyelesaikan masalah Anda untuk mengatur ulang AVR sebelum tegangan turun ke 4,5 V.

Hanya aku
sumber
Saya berasumsi BOD tidak menggunakan prosesor itu sendiri tetapi itu adalah perangkat keras khusus. Mungkin mereka mengubahnya untuk varian PB? Saya akan terkejut jika mereka tidak lagi mendukung BOD untuk 20 MHz. Bodlevel tertinggi adalah 4.3 V, jadi 20 MHz akan membutuhkan BOD eksternal? Tetap saja, saya ragu ini saja penyebabnya. Saya membuat tes dengan 20 MHz, 2.7V bodlevel, mengatur VCC ke 3V, itu berjalan dengan baik. Ketika saya mengurangi tegangan secara manual menjadi sedikit di bawah 2,7, output berhenti, ketika saya meningkatkannya di atas 2,7 output dilanjutkan, selalu, itu tidak pernah gagal, bahkan sekali pun. Hanya startup dari 1.1 V yang tampaknya menonaktifkan BOD.
vsz
Kemungkinan besar itu adalah perangkat keras khusus, tetapi selama undervoltage sebelum BOD dimulai, dapatkah Anda yakin data yang benar diambil dari flash untuk eksekusi CPU, dan apakah CPU mengeksekusi dengan benar? Mungkin, atau hanya menulis data acak ke register yang dipesan yang melakukan hal-hal yang tidak ditentukan. Spesifikasi telah berubah untuk varian PB, dan mereka tidak mendukung BOD untuk 20MHz baik pada chip yang lebih lama. Varian PB memiliki kurva BOD dan POR yang memang berbeda dan menghasilkan tegangan yang lebih rendah.
Justme
Silakan lihat gambar kedua saya. BOD tampaknya bekerja dengan benar dan telah mereset chip. Ini hanya gagal untuk menginisialisasi pada startup berikutnya. Juga, saya telah mendorong chip ini pada 3 V dan berfungsi dengan benar, tidak pernah gagal satu kali pun.
vsz
Nah menurut saya chip tidak perlu bekerja di luar area operasi yang aman, tapi mari kita lanjutkan. BOD tidak akan mengatur ulang Clock Failure Detector, jadi hanya Power-On reset dan reset eksternal yang akan beralih dari jam internal. Jadi periksa kembali pengaturan sekering CFD. Apakah Anda menggunakan kristal eksternal atau jam eksternal? Sekering CFD sebelumnya mungkin sekering Ayunan Penuh. Dan karena tidak ada sekring ayun penuh, frekuensi maksimum untuk kristal adalah 16MHz, dan 20MHz membutuhkan sinyal clock level logika eksternal. Jadi bisa menjadi masalah startup kristal juga, jadi letakkan cakupan pada pin kristal juga.
Justme
Saya menggunakan kristal. Ide bagus, saya akan memeriksanya. Harap dicatat, bahwa perilaku yang sama yang saya gambarkan dengan gambar, terjadi tidak peduli apakah CFD hidup atau mati.
vsz