Programmer untuk keluarga tinyAVR baru berdasarkan konverter CH340 Cina yang murah

Unified Program dan Debug Interface (UPDI) adalah antarmuka satu-kawat untuk pemrograman / debugging mikrokontroler Atmel 8-bit yang baru, menggantikan antarmuka PDI dua-kawat yang digunakan untuk memprogram mikrokontroler AVR XMEGA.

gambar

Jadi, resimen protokol Atmelovsk tiba - ISP, JTAG, debugWIRE, TPI, aWire, PDI, sekarang di sini adalah UPDI. Pada saat yang sama, situasi ekosistem di AVR masih sangat tidak berpengharapan, jadi kami akan sepenuhnya mengabaikan penggunaannya, tetapi tren terbaru sedikit menyenangkan kami, oleh karena itu artikel ini ditulis.

Hanya pemilik beruntung dari programmer Atmel ICE yang dapat menggunakan protokol UPDI, yang sangat tidak nyaman untuk digunakan karena pilihan konektor yang agak aneh, dan tidak begitu murah untuk membelinya dalam skala industri. Selain itu, itu memerlukan instalasi Atmel Studio, yang secara berkala menolak untuk bekerja dengannya, karena menurut kebijakan perusahaan kami, sebagian besar komputer tidak memiliki akses ke Internet, dan studio secara berkala menjelajah di sana baik untuk driver atau untuk beberapa perpustakaan, akibatnya ada saat-saat ketika programmer terlihat dalam sistem, yaitu driver diinstal dengan benar, tetapi ia tidak diperhatikan oleh studio itu sendiri sampai memperoleh akses ke jaringan dan tidak diperbarui secara paksa.

Oleh karena itu, segera setelah kami mulai menggunakan mikrokontroler ATTiny1616 yang baru dan lebih nyaman dalam perkembangan kami (tentang keuntungannya nanti), ada kebutuhan akan alat yang dapat kami gunakan untuk menulis ke pengontrol bootloader dalam produksi. Tentu saja, tanpa SMS dan pendaftaran akses ke Internet.

Setelah sedikit mencari, saya menemukan proyek pyupdi di Github (https://github.com/mraardvark/pyupdi) - implementasi protokol UPDI dengan Python, dan implementasi ini didasarkan pada protokol UART yang biasa, kecuali tanpa konverter level, yang, pada kenyataannya, bahkan lebih nyaman, karena memungkinkan Anda untuk menggunakan chip konverter FTDI standar atau mitra Cina mereka CH340 / 341.

Proyek itu diunduh dan diuji, semuanya berjalan cukup riang. Tetapi setelah beberapa hari menjadi jelas bahwa dia masih tidak cocok dengan kita. Alasan:

  • instalasi Python dan seluruh kelompok paket diperlukan (saya mengingatkan Anda bahwa kita berbicara tentang komputer tanpa akses ke Internet), saya harus mengunduh dan menginstal secara manual hampir selusin paket berbeda yang saling menarik dengan dependensi. Ya, pada prinsipnya, Anda dapat membuat file yang dapat dieksekusi di komputer lain dari skrip Python, ini entah bagaimana menyelesaikan masalahnya, tetapi daftar masalah tidak berakhir di situ
  • hampir tidak ada kesalahan saat memeriksa skrip, setiap kesalahan diakhiri dengan interupsi yang mengindikasikan sekelompok file yang saling terhubung, yang bagi staf biasa tidak terlihat sangat jelas
  • Tidak mungkin membaca isi controller
  • tidak ada cara membaca sekering
  • kecepatan skrip meninggalkan banyak yang diinginkan, 16 kb ditulis selama hampir satu menit, ini karena tidak adanya optimasi selama transfer, semuanya didasarkan pada timing yang ketat
  • kurangnya indikasi proses perekaman
  • proyek tidak mendukung sejumlah prosesor yang dapat mendukung
  • proyek setengah mati dan tidak menanggapi permintaan

Masalah dipecahkan untuk beberapa waktu dalam kerangka Python, tetapi setelah perbaikan saya harus menyusun kembali proyek, tes, sehingga ada keinginan untuk menulis ulang skrip pada sesuatu yang lebih akrab dan lebih cepat, yaitu di C. Bagaimanapun juga, kita adalah embedder!

Sekarang secara singkat tentang keuntungan dari 1-Seri tinyAVR baru:

  • penyatuan nyata periferal dan ruang alamat dalam 2 kb hingga 32 kb
  • konfigurasi bootloader yang nyaman (di awal memori!)
  • penyederhanaan signifikan dari algoritma ISP (In-System-Programming)
  • transisi ke arsitektur von Neumann
  • memori flash hingga 32 kb dalam satu paket kecil (3x3 mm) dengan 24 pin, yang hingga 22 (!) dapat digunakan sebagai IO
  • kehadiran osilator internal pada 16/20 MHz
  • berkurangnya ketergantungan kinerja pada konfigurasi sekering (AVR sakit kepala terus-menerus)
  • bagian analog yang sangat baik untuk pengontrol kecil (ADC / DAC / komparator dengan kemungkinan perpindahan input / output internal dan eksternal)
  • pemrograman dan debugging satu kawat
  • harga eceran sangat rendah (dari 0,6 โ‚ฌ untuk 16 kb)

Sebagai bagian penting dari programer, kami mengambil konverter TTL USB-UART berbasis chip CH340 Cina, seperti ini:

gambar

Untuk pemrograman, cukup menghubungkan dua outputnya RX dan TX, karena keduanya sudah dilengkapi dengan resistor keluaran 1.5k, jika tidak ada resistor dalam model konverter Anda, maka Anda perlu menambahkannya. Output gabungan terhubung ke pin UPDI pada chip yang dapat diprogram, ground konverter juga harus terhubung ke ground controller. Jika Anda memiliki daya eksternal, Anda hanya perlu memperhatikan apakah itu sesuai dengan daya yang digunakan konverter (3.3V atau 5V). Jika ada kebutuhan, maka Anda dapat memberi daya rangkaian dengan pengontrol dan dari konverter itu sendiri, yang bisa sangat nyaman untuk pemrograman awal.

gambar

Perhatian! Resistor adalah opsional, perlu disolder hanya jika konverter Anda tidak memiliki resistor pelindung pada output.

Satu-satunya masalah yang terkait dengan chip CH340 adalah bahwa ia tidak bekerja di versi Linux program saya, karena bit paritas digunakan dalam protokol pemrograman, dan driver CH340 dalam versi kernel saya tidak bekerja dengan bit ini dengan benar. Mungkin masalah akan diperbaiki dalam waktu dekat, sejauh ini saya belum memiliki kesabaran untuk melakukan ini.

Sebagai hasil dari kerja dan percobaan, program updiprog ditulis dan didebug dalam IDE Code :: Blocks, kode sumbernya diposting di Github .

Apa yang diterapkan dalam versi program ini:

  • Ditambahkan kemampuan untuk membaca isi memori flash controller ke file hex
  • Kemampuan tambahan untuk membaca status semua sekering pengontrol
  • bila memungkinkan menambahkan penanganan kesalahan dengan pesan yang sesuai
  • indikasi tambahan dari proses menulis / membaca
  • kecepatan meningkat secara signifikan (sekitar 6 detik untuk membaca 16 kb)
  • Dukungan tambahan untuk semua mikrokontroler 1-Series

Ukuran awal program adalah sekitar 25 kb, dibandingkan dengan 5 kopecks untuk skrip sumber Python yang dikompilasi.

Saya berharap pekerjaan yang dilakukan akan bermanfaat bagi seseorang. Saya akan senang dengan ulasan dan saran.

Source: https://habr.com/ru/post/id427349/


All Articles