RASPBERRY PI ENTERS MICROCONTROLLER GAME WITH $4 PICO

RASPBERRY PI ENTERS MICROCONTROLLER GAME WITH $4 PICO

RASPBERRY PI ENTERS MICROCONTROLLER GAME WITH $4 PICO

Raspberry Pi identik dengan komputer Linux papan tunggal. Tidak lagi. Papan Raspberry Pi Pico $ 4 adalah upaya mereka untuk masuk ke pasar modul mikrokontroler yang ramai.

Mikrokontroler yang dimaksud, RP2040, juga merupakan perampokan pertama Raspberry Pi ke dalam silikon khusus, dan ia mendapat Cortex M0 + inti ganda dengan jumlah SRAM yang mewah dan beberapa perangkat keras periferal I / O khusus yang sangat menarik yang kemungkinan besar berarti Anda tidak pernah memilikinya. menggigit-bang lagi. Tetapi mikrokontroler kosong tidak menyenangkan tanpa papan dev, dan Raspberry Pi Pico menambahkan 2 MB flash, konektivitas USB, dan manajemen daya yang bagus.

Seperti halnya mesin Raspberry Pi Linux, penekanannya adalah untuk membuat Anda aktif dan berjalan dengan cepat, dan ada banyak dokumentasi: dari panduan jenis “Memulai” untuk C / C ++ dan MicroPython SDK dengan contoh kode, hingga lembar data yang serius untuk Pico dan RP2040 itu sendiri, untuk catatan desain perangkat keras dan papan breakout KiCAD, dan bahkan isi dari ROM Boot on-board. Pico tampaknya dirancang untuk membuat pengenalan ramah ke mikrokontroler menggunakan MicroPython, tetapi ada cukup panduan yang tersedia bagi Anda untuk masuk sedalam yang Anda inginkan.

Pengambilan cepat kami: RP2040 adalah mikrokontroler yang dipikirkan dengan sangat baik, dengan segudang sentuhan desain yang bagus, daya yang cukup untuk menyelesaikan sebagian besar pekerjaan, dan periferal perangkat keras yang ditentukan perangkat lunak yang inovatif dan sangat ramah peretas. Ini didukung oleh dokumentasi yang baik dan banyak contoh yang berfungsi, dan pada akhirnya menjalankan sepasang inti CPU ARM MO + yang sudah dikenal. Jika hal ini mulai populer dengan harga $ 4 yang diusulkan, kami dapat melihatnya menjadi tujuan utama untuk banyak proyek yang tidak memerlukan konektivitas nirkabel.

 

THE SPECS AND THE LUXURIES

Dalam banyak hal, Pico adalah papan mikrokontroler “normal” yang ditunjuk dengan baik. Ini memiliki 26 3,3 V GPIO, port ARM Serial Wire Debug (SWD) standar, host USB atau kemampuan perangkat, dua UART, dua I2C, dua SPI, dan 16 saluran PWM dalam delapan grup. (Unit PWM juga dapat mengukur sinyal PWM yang masuk, baik frekuensi maupun duty cycle-nya.) Pico memiliki ADC 12-bit, meskipun hanya terhubung ke empat tiga pin, jadi Anda harus sedikit berhati-hati di sana. (Catatan Ed: RP2040 memiliki empat ADC, tetapi yang keempat tidak tersedia di Pico.)

Inti ARM M0 + kembar dijalankan dari PLL, dan memiliki spesifikasi hingga 133 MHz, yang cukup cepat. Ada pembagi jam terpisah untuk hampir setiap periferal, dan mereka dapat dinyalakan dan dimatikan secara individual untuk penghematan daya, seperti kebanyakan mikrokontroler ARM lainnya. Ini berjalan penuh pada sekitar 100 mA @ 5 V, dan memiliki mode tidur retensi memori penuh di bawah 1 mA.

Seperti yang dilakukan modul ESP8266 dan ESP32, ia menggunakan flash ROM eksternal untuk menyimpan program, dan dapat menjalankan kode langsung dari flash seolah-olah itu adalah memori internal. Papan Pico hadir dengan chip flash QSPI 2 MB yang layak, tetapi jika Anda praktis dengan besi solder, Anda dapat memuat hingga 16 MB. Memiliki SRAM 264 kB, yang tentunya nyaman. RAM dibagi secara internal menjadi empat bank bergaris 64 kB untuk akses paralel cepat, tetapi mereka juga dapat diakses sendiri-sendiri jika Anda mau. Dua bank 4 kB tambahan tidak bergaris dan menyarankan untuk menggunakannya sendiri sebagai memori tumpukan per inti, tetapi tidak ada yang memaksa Anda untuk menggunakannya dengan cara itu juga.

Ada banyak kemudahan tingkat perangkat keras kecil. Semua register konfigurasi memiliki lebar 32 bit, jadi Anda mungkin tidak ingin menentukan semuanya, atau mungkin Anda ingin menghindari tarian baca-ubah-tulis. Seperti banyak chip STM32, ada peta memori khusus yang memungkinkan Anda mengatur, menghapus, atau XOR bit apa pun di register konfigurasi mana pun dalam satu perintah atom. Ada juga 30 GPIO, jadi semuanya muat di dalam register 32-bit tunggal – tidak satu pun dari Port B, Pin 7 ini. Ini juga berarti bahwa Anda dapat membaca atau menulis semuanya sekaligus, sementara pengaturan pin individu mudah dilakukan melalui akses atom di atas.

ROM mask internal berisi bootloader UF2, yang berarti Anda selalu dapat mengontrol chip kembali. Ketika Anda mencolokkan Pico dengan menahan tombol BOOTSEL, itu muncul sebagai perangkat penyimpanan massal USB, dan Anda dapat menyalin kode Anda, tanpa programmer, dan Raspberry bahkan menyediakan file semua-nol yang dapat Anda salin ke benar-benar bersihkan mesin. Namun, jika Anda menyalin biner MicroPython Pico, Anda tidak akan membutuhkan bootloader lagi. ROM topeng juga berisi beberapa rutinitas cepat yang mendukung matematika integer dan floating point, dan semua isinya adalah open source seperti yang disebutkan di atas.

Pengaturan daya onboard adalah konfigurasi boost-buck yang mengambil input dari 1,8 V hingga 5 V. Ini adalah kisaran yang baik untuk baterai lithium, misalnya, yang bisa merepotkan karena mereka bekerja di atas dan di bawah IC 3,3 V, jadi senang memiliki pengatur dana tambahan untuk memeras beberapa miliamp-jam terakhir. Atau Anda dapat menjalankan proyek Anda pada dua AA. Itu bagus.

Jadi Pico / RP2040 adalah papan pengembang modern yang kompeten dengan beberapa sentuhan yang bijaksana. Tapi itu lebih baik.

 

THE PIO: NEVER BITBANG AGAIN

Perangkat yang paling menonjol pada RP2040 dan Pico adalah perangkat keras Programmable I / O (PIO), yang memungkinkan Anda untuk menentukan perangkat komunikasi digital Anda sendiri. Ada dua unit PIO ini, dan masing-masing memiliki empat mesin status terprogram yang menjalankan program berurutan yang ditulis dalam bahasa rakitan PIO khusus. Setiap mesin negara memiliki pembagi jamnya sendiri, memori register, flag IRQ, antarmuka DMA, dan pemetaan GPIO. Ini memungkinkan I / O yang pada dasarnya akurat siklus arbitrer, melakukan pekerjaan berat sehingga CPU tidak perlu melakukannya.

Jika Anda ingin memprogram UART lain, misalnya, itu sepele. Tapi begitu juga UART yang dikodekan Manchester, atau encoder / decoder kode abu-abu, atau bahkan trik yang lebih bagus. Salah satu contoh aplikasi adalah contoh video DPI, dengan satu mesin negara menangani waktu scanline dan jam piksel, sementara yang lain mendorong keluar data piksel dan mengkodekannya. Ini adalah jenis tugas sederhana namun cepat yang dapat menghambat CPU, menyebabkan gangguan waktu, jadi perangkat keras khusus adalah solusi yang tepat.

PIO dimaksudkan untuk memiliki banyak fleksibilitas CPLD atau FPGA, tetapi lebih mudah untuk diprogram. Setiap mesin negara hanya dapat mengambil “program” yang panjangnya 32 instruksi, tetapi bahasa “pioasm” sangat padat. Misalnya, perintah untuk menyetel status pin juga memiliki argumen yang mengatakan berapa lama menunggu setelah pin disetel, dan pin “set samping” tambahan dapat diputar-putar dalam instruksi yang sama. Jadi dengan satu instruksi Anda dapat menaikkan garis jam, mengatur data Anda, dan menahan status ini untuk waktu yang ditentukan. Implementasi dasar SPI master TX adalah dua baris.

Atau ambil contoh protokol LED WS2812. Untuk mengirim logika 1, Anda menahan baris data self-clocked tinggi untuk waktu yang lama dan rendah untuk waktu yang singkat. Untuk mengirim logika 0, garis data dipegang tinggi untuk waktu yang singkat dan rendah untuk waktu yang lama. Membuat rutinitas untuk melakukan ini dengan kecepatan yang wajar di CPU, tanpa gangguan, membutuhkan air mata peretas yang tidak sepele. Dengan periferal PIO, menulis rutinitas untuk menggeser bit-bit ini dengan akurasi siklus absolut sangatlah mudah, dan setelah selesai kode Anda cukup menulis nilai RGB ke PIO dan sisanya diurus.

Untuk menjalankan kode PIO dari C, assembler dipanggil pada waktu kompilasi, program diubah menjadi bahasa mesin dan disimpan sebagai matriks dalam file header, dan kemudian ini dapat ditulis ke perangkat PIO dari dalam main () untuk menginisialisasinya . Dengan Python, ini lebih mudah – dekorator @asm_pio mengubah fungsi menjadi kode PIO. Anda hanya perlu menulis fungsi “Python” menggunakan sembilan instruksi perakitan PIO dan kemudian menghubungkannya ke pin GPIO. Setelah itu, Anda dapat memanggilnya dari kode Anda seolah-olah itu perangkat biasa.

Setelah bermain-main dengannya hanya sedikit, PIO adalah fitur paling keren dari Pico / RP2040. Ini hanya sedikit logika yang dapat diprogram dengan koreksi siklus, tetapi seringkali, hanya itu yang Anda butuhkan. Dan jika Anda tidak ingin mempelajari bahasa assembly baru – meskipun hanya sembilan instruksi – sudah ada banyak contoh, dan tentunya orang-orang akan mengembangkan lebih banyak lagi setelah papan diluncurkan.

 

IDES AND SDKS: C AND MICROPYTHON

Komputer papan tunggal (SBC) Raspberry Pi, bila dikombinasikan dengan dokumentasi dan contoh mereka, biasanya mengelola perpaduan yang bagus menjadi cukup sederhana untuk pemula sementara pada saat yang sama tidak terlalu banyak bersembunyi. Hasilnya adalah, alih-alih mengabstraksi Linuxiness sistem yang mendasarinya, Anda diperkenalkan dengannya dengan cara yang bersahabat. Tampaknya itulah yang menjadi tujuan Raspberry dengan Pico – pengantar mikrokontroler yang dibuat bersahabat melalui dokumentasi dan kemudahan penggunaan MicroPython, tetapi itu juga tidak menarik pukulan apa pun saat Anda menoleh untuk melihat kode C / C ++.

Dan memiliki SBC Raspberry Pi membuat banyak mikrokontroler hardcore lebih sederhana. Misalnya, jika Anda ingin melakukan debugging pada chip, Anda harus terhubung melalui antarmuka SWD, dan untuk itu Anda biasanya membutuhkan programmer. Tetapi tentu saja, Anda juga dapat menggigit pengontrol SWD dengan GPIO dari Raspberry Pi SBC, tetapi Anda harus mengonfigurasi OpenOCD dengan benar untuk melakukannya.

Jika itu semua terdengar seperti omong kosong, jangan khawatir – semua ini ditangani oleh skrip pico_setup.sh sederhana. Itu tidak hanya menginstal semua kompilasi dan lingkungan debugging, itu juga (opsional) menurunkan VScode untuk Anda. Bagus.

Dan Anda pasti ingin memprogramnya melalui SWD pada akhirnya. Siklus mencabut USB, menahan tombol, dan memasang kembali USB menjadi sangat cepat.

Jika Anda pecandu baris perintah, sistem build C SDK didasarkan pada CMake dan berjalan dengan baik dari baris perintah jika Anda sudah menginstal toolchain ARM. Dan seperti semua SDK, ada sejumlah boilerplate yang diperlukan untuk memulai sesi pengkodean baru. Ini diurus oleh generator proyek pico, jadi Anda tidak perlu melakukannya.

Dalam panduan “Memulai”, Anda akan menemukan petunjuk untuk menyiapkan lingkungan Anda pada mesin Raspberry Pi SBC, Windows, Mac, atau desktop Linux. Jika Anda lebih suka Eclipse sebagai IDE, ada juga petunjuk integrasi.

 

TWO CORES: HERE BE DRAGONS

Jika ada satu area yang menurut saya belum sepenuhnya berkembang, itu adalah aspek dual-core dari sistem. Saat ini, jika Anda menulis kode C atau Python, itu berjalan di Core 0, sementara Core 1 hanya diam. Dokumentasi C dan Python SDK memberi tahu Anda cara memulai utas pada inti lain, dan ada kode contoh juga tersedia, tetapi instruksinya jarang. Di C, ada pico / multicore.h dan bahkan mutex, semaphore, dan queue libs untuk Anda sertakan, tetapi dokumentasi memperingatkan bahwa sebagian besar fungsi stdlib tidak thread-safe. Dengan Python, Anda mengimpor _thread dan memanggil metode start_new_thread (), tetapi saya tidak tahu seberapa besar kontrol yang Anda miliki.

Jika semua hal di atas terdengar menakutkan, ya, itu sedikit. Kebenaran tentang pengkodean untuk sistem multiprosesor adalah bahwa ia membuka cara baru untuk kesalahan, karena satu CPU mengubah nilai dari bawah yang lain, atau keduanya mencoba menulis ke UART pada saat yang bersamaan. Kami menulis Raspberry dan bertanya apakah mereka berencana untuk mengirim melalui RTOS, yang memberikan sedikit lebih banyak struktur untuk masalah, dan mereka menjawab bahwa itu sebenarnya yang pertama ada di piring mereka setelah mereka menyelesaikan rilis. Jadi, kecuali Anda tahu apa yang Anda lakukan, Anda mungkin belum mendapatkan manfaat penuh dari chip dual-core. Tapi kami benar-benar menantikan RTOS mendapatkan perawatan dokumentasi-dan-tutorial Raspberry Pi ketika itu terjadi.

 

DEEP THOUGHTS

Tidak setiap hari Anda melihat pemain baru memasuki pasar mikrokontroler, apalagi pemain dengan kualifikasi Raspberry Pi yang ramah peretas. Untuk itu saja, papan ini terkenal. Tapi set fiturnya juga solid, ada banyak kenyamanan baik di silikon maupun penyangga, dan ini membawa satu kemampuan yang benar-benar baru ke meja dalam bentuk unit PIO. Tambahkan ke semua ini label harga $ 4, dan Anda dapat membayangkannya menjadi tujuan utama orang – untuk saat-saat ketika Anda tidak memerlukan konektivitas nirkabel.

Memang, satu-satunya pesaing nyata untuk papan ini dalam hal rasio harga / kinerja adalah berbagai papan ESP32. Tetapi mereka juga hewan yang sangat berbeda – satu menawarkan lebih sedikit GPIO tetapi memiliki fitur nirkabel yang luas, dan yang lainnya memiliki GPIO, perangkat dan USB host yang lebih (dan lebih fleksibel), tetapi tidak ada radio. Konsumsi daya saat berjalan penuh, dengan nirkabel dimatikan, adalah sedikit keuntungan bagi ESP32, tetapi mode tidur Pico sedikit lebih hemat. Kedua SDK menyelesaikan pekerjaan di C, dan keduanya menjalankan MicroPython. Inti ganda ESP32 menjalankan FreeRTOS, tetapi kami membayangkan itu tidak akan lama sebelum bidang permainan itu diratakan. Jadi pada dasarnya ini tergantung pada WiFi vs USB.

Tentu saja, dengan uang yang sedikit lebih sedikit, seseorang dapat mengambil salah satu dari papan “Pil Hitam” berbasis STM32, dengan satu set pro dan kontra lainnya. Pilihan, pilihan!

Dengan Pico, Raspberry Pi memasuki bidang yang ramai. Mereka mendapatkan pengenalan nama, trik perangkat keras yang keren, proposisi nilai yang hebat, dan rekam jejak dokumentasi yang solid. Jika saya mengkodekan aplikasi GPIO yang berat tanpa memerlukan nirkabel, Pico akan menjadi pilihan yang tepat, terutama jika saya dapat menggunakan inti ekstra.

 

Saya akan meninggalkan Anda dengan sebuah penggoda: Pada halaman 9 dari lembar data RP2040, mereka menjabarkan apa singkatan dari “2040”: dua inti, tipe M0 +, lebih dari 256 kB RAM, dan nol kB flash. Apakah itu berarti pada akhirnya kita akan melihat model dengan lebih banyak RAM, flash onboard, atau inti ARM yang berbeda? RP2050? RP2048? Berspekulasi dengan liar di komentar.

Leave Comment

error

Enjoy this blog? Please spread the word :)

Facebook
YouTube
Instagram