Beberapa tahun yang lalu saya berkenalan dengan mikrokontroler Rusia dari Milandr. Saat itu tahun 2013, ketika para insinyur dengan penuh semangat mendiskusikan hasil pertama dari Program Target Federal "Pengembangan basis komponen elektronik dan elektronik radio" untuk 2008-2015. Saat itu, pengontrol K1986BE9x (inti Cortex-M3) sudah dirilis, dan pengontrol 1986BE1T (inti Cortex-M1) baru saja muncul. Dia, dalam wadah plastik LQFP-144, memiliki penunjukan K1986BE1QI (penerbangan) dalam dokumentasinya, dan penunjukan MDR32F1QI pada chip itu sendiri. Di situs web pabrikan, ia memiliki akhiran "udara", karena memiliki antarmuka khusus untuk industri pesawat terbang (ARINC 429, MIL_STD_1553).
Anehnya, pada saat pendistribusian pengontrol ini, perusahaan Milander menyiapkan kit debug dan perpustakaan subrutin untuk bekerja dengan periferal, "tetapi tanpa jaminan dan kewajiban tambahan terkait kebenaran perpustakaan." Perpustakaannya mirip dengan Perpustakaan Periferal Standar dari STMicroelectronics. Secara umum, semua pengontrol ARM yang dibangun di atas inti Cortex-M memiliki banyak kesamaan. Karena alasan ini, kenalan dengan pengontrol Rusia yang baru berjalan dengan cepat. Dan bagi mereka yang membeli kit debug bermerek, dukungan teknis diberikan selama penggunaan.
Kit debug untuk mikrokontroler 1986BE1T, Β© Milandr
Namun, seiring waktu, "penyakit masa kanak-kanak" dari chip dan perpustakaan baru mulai muncul. Contoh pengujian firmware berfungsi tanpa masalah yang terlihat, tetapi dengan modifikasi yang signifikan, crash dan kesalahan menghujani. "Menelan" pertama dalam praktik saya adalah kegagalan yang tidak dapat dijelaskan pada pengontrol CAN. Setahun kemudian, masalah dengan modul ditemukan pada pengontrol 1986BE1T (udara) dari revisi awal
Fitur yang tidak menyenangkan adalah perlu bekerja dan mengatasi kesalahan bukan pada papan debug, tetapi pada papan perangkat prototipe yang direncanakan untuk produksi pabrik serial. Selain konektor JTAG, biasanya tidak ada apa-apa di sana. Sulit dan tidak nyaman untuk terhubung dengan penganalisa logika, dan biasanya tidak ada LED dan layar. Untuk alasan ini, ide membuat papan debug saya sendiri muncul di kepala saya.
Di satu sisi, ada kit debug bermerek di pasaran, serta papan bagus dari LDM-Systems dari Zelenograd. Di sisi lain, harga untuk produk ini membuat seseorang menjadi pingsan, dan fungsionalitas dasar tanpa kartu ekspansi tidak memenuhi harapan. Papan dengan pengontrol yang disolder dan tajuk pin tidak menarik bagi saya. Dan papan yang lebih menarik harganya mahal.
Papan pengembangan MILANDR LDM-HELPER-K1986BE1QI-FULL, Β© LDM Systems
Perusahaan "Milandr" memiliki kebijakan penetapan harga dan pemasaran yang unik. Jadi, Anda bisa mendapatkan sampel beberapa sirkuit mikro secara gratis, tetapi ini hanya tersedia untuk badan hukum dan dikaitkan dengan pencarian birokrasi. Secara umum, sirkuit mikro dalam kemasan keramik-logam berwarna emas dalam arti harfiah dan kiasan. Misalnya, biaya pengontrol 1986BE1T di Moskow dari 14 hingga 24 ribu rubel. Chip memori statis 1645RU6U harganya mulai 15000 rubel. Dan ini urutan harga semua produk. Akibatnya, bahkan lembaga penelitian khusus dengan pesanan negara menghemat uang dan menghindari harga tersebut. Keripik dalam wadah plastik untuk penggunaan sipil jauh lebih murah, tetapi tidak tersedia dari pemasok populer. Selain itu, kualitas keripik dalam wadah plastik, menurut saya, lebih buruk daripada "emas". Misalnya, saya tidak dapat menjalankan pengontrol K1986BE1QI pada 128MHz tanpa meningkatkan pengaturan latensi flash. Pada saat yang sama, suhu pengontrol ini naik menjadi 40-50C. Tetapi pengontrol 1986BE1T ("emas") memulai pada 128 MHz tanpa pengaturan tambahan dan tetap dingin. Dia sangat baik.
Mikrokontroler "Emas" 1986BE1T, (c) Milandr
Saya beruntung mikrokontroler dalam wadah plastik masih dapat dibeli secara eceran dari LDM Systems, dan semua papan sirkuit tersedia secara gratis. Hal buruknya adalah di situs pada foto pengontrol, terlihat tanda yang menyatakan bahwa ini adalah revisi ke-4 tahun 2014, yaitu. dengan cacat. Saya berpikir lama - untuk membeli atau tidak membeli. Jadi beberapa tahun berlalu ...
Ide membuat papan debug belum hilang kemana-mana. Lambat laun, saya membentuk semua persyaratan dan memikirkan bagaimana menempatkan semua ini di satu papan, agar kompak dan tidak mahal. Secara paralel, saya memesan komponen yang hilang dari China. Saya tidak terburu-buru - saya melakukan segalanya untuk diri saya sendiri. Pemasok Cina terkenal karena kecerobohannya - saya harus memesan barang yang sama di tempat berbeda untuk mendapatkan semua yang saya butuhkan. Selain itu, beberapa chip memori ternyata bekas - jelas disolder dari perangkat yang rusak. Ini memukul saya kemudian.
Membeli mikrokontroler Milandr K1986BE1QI (penerbangan) bukanlah tugas yang mudah. Di toko Chip and Dip yang sama, di bagian "Posisi untuk dipesan", saya hanya menemukan K1986BE92QI seharga 740 rubel, tetapi tidak cocok untuk saya. Satu-satunya pilihan adalah membeli revisi non-segar dari LDM-Systems seharga 2000 rubel. Karena saya tidak dapat menemukan penggantinya di tempat lain, saya memutuskan untuk membeli apa adanya. Yang mengejutkan saya, mereka menjual pengontrol rilis Desember 2018 yang baru, revisi 6+ (1820). Dan situs tersebut masih memiliki foto lama, dan pada saat penulisan pengontrol tidak tersedia ...
Mikrokontroler K1986BE1QI (penerbangan) dalam kemasan teknologi, (c) Foto oleh penulis
Spesifikasi teknis utama papan pengembangan saya MDB1986 berikut ini:
- debugger-programmer bawaan yang kompatibel dengan J-Link dan CMSIS-DAP;
- Memori statis 4Mbit (256k x 16, 10 ns);
- chip memori flash 64Mbit, Winbond 25Q64FVSIG;
- Transceiver antarmuka RS-232 dengan jalur RTS dan CTS;
- antarmuka dan konektor untuk Ethernet, USB, CAN;
- Pengontrol tampilan 7-segmen MAX7221;
- konektor pin untuk bekerja dengan MCIO (MIL_STD_1553) dan ARINC429;
- fototransistor Everlight PT17-21C;
- lima LED berwarna, tombol reset dan dua tombol pengguna;
- ini ditenagai oleh port USB 5 volt;
- dimensi papan sirkuit tercetak 100 x 80, mm
Saya menyukai papan seri STM-Discovery karena mereka memiliki programmer-debugger bawaan - ST-Link. ST-Link Bermerek hanya berfungsi dengan pengontrol STMicroelectronics, tetapi beberapa tahun yang lalu dimungkinkan untuk memperbarui firmware di ST-Link dan mendapatkan Debugger SEGGER J-Link OB (on-board). Secara hukum, ada batasan untuk menggunakan debugger seperti itu hanya dengan papan STMicroelectronics, tetapi sebenarnya potensinya tidak terbatas. Jadi, memiliki J-Link OB, Anda dapat memiliki programmer-debugger bawaan di papan debug. Saya perhatikan bahwa produk LDM-Systems menggunakan konverter CP2102 (Usb2Uart), yang hanya dapat mem-flash.
mikrokontroler STM32F103C8T6, nyata dan tidak nyata, (c) Foto oleh penulis
Jadi, perlu membeli STM32F103C8T6 asli, karena firmware bermerek tidak akan berfungsi dengan benar dengan klon. Saya meragukan tesis ini dan memutuskan untuk mencoba pengontrol CS32F103C8T6 dari perusahaan Cina CKS. Saya tidak memiliki keluhan tentang pengontrol itu sendiri, tetapi firmware ST-Link yang dipatenkan tidak berfungsi di dalamnya. J-Link berfungsi sebagian - perangkat USB terdeteksi, tetapi pemrogram tidak menjalankan fungsinya dan terus-menerus mengingatkan bahwa itu "cacat".
Kesalahan saat menjalankan debugger pada pengontrol non-asli
Saya tidak tenang dalam hal ini dan pertama kali menulis firmware untuk berkedip LED, dan kemudian menerapkan permintaan IDCODE menggunakan protokol JTAG. Pemrogram ST-Link yang saya miliki di papan Discovery dan program Utilitas ST-Link mem-flash CS32F103C8T6 tanpa masalah, sebagai hasilnya, saya memastikan bahwa papan saya berfungsi. Yang membuat saya senang, pengontrol target K1986BE1QI (penerbangan) dengan senang hati mengeluarkan IDCODE-nya melalui jalur TDO.
Oscillogram dari garis sinyal TDO dengan respons yang disandikan IDCODE, (c) Foto oleh penulis
Jadi port SWD berguna untuk men-debug debugger itu sendiri dan memeriksa IDCODE
Ada opsi dengan debugger
Pengoperasian yang sukses dari debugger bawaan J-Link STLink V2
Ketika semua komponen kunci dari papan debug masa depan tersedia, saya masuk ke Eagle CAD dan menemukan bahwa mereka tidak ada di perpustakaan elemen. Tidak ada tempat tujuan - saya harus menggambarnya sendiri. Pada saat yang sama, saya membuat kursi untuk memori, konektor HanRun untuk Ethernet, dan menambahkan bingkai untuk resistor dan kapasitor. File proyek dan pustaka komponen dapat ditemukan
Diagram skema papan debug MDB1986
Papan ini ditenagai oleh sumber DC 5 volt dari port USB. Ada dua port USB Tipe-B di papan tulis. Satu untuk programmer, yang kedua untuk pengontrol K1986BE1QI. Dewan dapat bekerja dari salah satu sumber ini atau keduanya sekaligus. Penyesuaian beban paling sederhana dan perlindungan saluran listrik diimplementasikan pada dioda Schottky, di sirkuit D2 dan D3 (SS24). Juga pada diagram Anda dapat melihat sekering yang memulihkan sendiri F1 dan F2 pada 500mA. Garis sinyal port USB dilindungi oleh rakitan dioda USBLC6-2SC6.
Sirkuit debugger-programmer ST-Link diketahui banyak orang, dapat ditemukan dalam dokumentasi untuk papan STM32-Discovery dan sumber lainnya. Untuk firmware utama klon ST-Link / J-Link-OB / DAP (opsional), saya mengeluarkan jalur SWDIO (PA13), SWCLK (PA14), GND. Banyak yang menggunakan UART untuk firmware dan terpaksa menarik jumper BOOT. Tapi SWD lebih nyaman bagi saya, selain itu protokol ini memungkinkan debugging.
Hampir semua komponen papan ditenagai oleh 3.3 volt, yang berasal dari pengatur tegangan AMS1117-3.3. Untuk menekan interferensi elektromagnetik dan lonjakan arus, filter LC dari kapasitor dan choke seri BLM31PG digunakan.
Secara terpisah, perlu disebutkan driver tampilan 7-segmen MAX7221. Menurut spesifikasi, catu daya yang disarankan adalah dari 4 hingga 5.5 volt, dan level sinyal tinggi (logika) setidaknya 3.5V (0.7 x VCC), saat ditenagai oleh 5V. Untuk pengontrol K1986BE1QI (penerbangan), keluaran unit logis sesuai dengan tegangan dari 2.8 hingga 3.3V. Jelas, ada ketidaksesuaian pada level sinyal yang dapat mengganggu operasi normal. Saya memutuskan untuk menyalakan MAX7221 dari 4V dan menurunkan level sinyal menjadi 2.8V (0.7 x 4 = 2.8). Untuk melakukan ini, dioda D4 (RS1A atau FR103) dipasang secara seri di rangkaian daya driver. Penurunan tegangan total adalah 0.9V (dioda Schottky 0.3V dan dioda 0.6V), dan semuanya berfungsi.
Sebagian besar port pada mikrokontroler K1986BE1QI (penerbangan) kompatibel dengan sinyal hingga 5V. Oleh karena itu, penggunaan transceiver CAN MCP2551 yang juga beroperasi dari 5V tidak menimbulkan masalah. Diagram menunjukkan chip MAX232 sebagai transceiver RS-3232, tetapi sebenarnya saya menggunakan SN65C3232D dari Texas Instruments, karena ini bekerja dari 3.3V dan memberikan kecepatan hingga 1Mbit/s.
Ada 4 resonator kuarsa di papan - satu untuk debugger (8 MHz) dan tiga untuk mikrokontroler target K1986BE1QI (penerbangan) dengan nilai nominal 32.768 kHz, 16 MHz, 25 MHz. Ini adalah komponen yang diperlukan, karena. parameter generator RC bawaan berada dalam kisaran luas dari 6 hingga 10 MHz. Frekuensi 25 MHz diperlukan untuk pengoperasian pengontrol Ethernet bawaan. Untuk beberapa alasan, situs web Milandra (mungkin secara tidak sengaja) menyatakan bahwa tidak ada Ethernet di dalam wadah plastik. Tapi kami akan mengandalkan spesifikasi dan fakta.
Insentif penting untuk membuat papan debug Anda sendiri adalah kesempatan untuk bekerja dengan bus sistem EBC (pengontrol bus eksternal), yang pada dasarnya adalah port paralel. Mikrokontroler K1986BE1QI (penerbangan) memungkinkan Anda terhubung dan bekerja dengan chip memori eksternal dan perangkat periferal, seperti ADC, FPGA, dll. Kemungkinan bus sistem eksternal cukup besar - Anda dapat bekerja dengan RAM statis 8-bit, 16-bit, dan 32-bit, ROM, dan Flash NAND. Untuk membaca / menulis data 32-bit, pengontrol dapat secara otomatis melakukan 2 operasi yang sesuai untuk sirkuit mikro 16-bit, dan 8 operasi untuk yang 4-bit. Jelas, operasi I/O 32-bit akan menjadi yang tercepat dengan bus data 32-bit. Kerugiannya termasuk kebutuhan program untuk beroperasi dengan data 32-bit, dan papan harus meletakkan 32 trek.
Chip SRAM, digunakan (tebak mana yang rusak)
Solusi yang seimbang adalah dengan menggunakan chip memori 16-bit. Saya berakhir dengan chip Integrated Silicon Solutions Inc. (ISSI IS61LV25616AL, 16x256k, 10ns, 3.3V). Tentu saja, perusahaan "Milandr" memiliki chip memori statisnya sendiri
Bus Eksternal dan Mode MandiriMikrokontroler K1986BE1QI (penerbangan) memiliki mode StandAlone yang unik, yang dirancang untuk akses eksternal langsung ke pengontrol Ethernet dan MCIO (MIL_STD_1553) melalui bus eksternal, sementara inti dalam keadaan reset, mis. tidak digunakan. Mode ini berguna untuk prosesor dan FPGA yang tidak memiliki Ethernet dan/atau MCIO.
Diagram koneksi adalah sebagai berikut:
- bus data MCU(D0-D15) => SRAM(I/O0-I/O15),
- bus alamat MCU(A1-A18) => SRAM(A0-A17),
- Kontrol MCU(nWR,nRD,PortC2) => SRAM (KAMI,OE,CE),
- SRAM(UB,LB) dihubungkan atau ditarik ke ground melalui resistor.
Garis CE ditarik ke atas melalui resistor, pin pengambilan byte MCU (BE0-BE3) tidak digunakan. Di bawah spoiler saya berikan kode untuk menginisialisasi port dan pengontrol bus eksternal.
Inisialisasi port dan pengontrol EBC (pengontrol bus eksternal)
void SRAM_Init (void)
{
EBC_InitTypeDef EBC_InitStruct = { 0 };
EBC_MemRegionInitTypeDef EBC_MemRegionInitStruct = { 0 };
PORT_InitTypeDef initStruct = { 0 };
RST_CLK_PCLKcmd (RST_CLK_PCLK_EBC, ENABLE);
PORT_StructInit (&initStruct);
//--------------------------------------------//
// DATA PA0..PA15 (D0..D15) //
//--------------------------------------------//
initStruct.PORT_MODE = PORT_MODE_DIGITAL;
initStruct.PORT_PD_SHM = PORT_PD_SHM_ON;
initStruct.PORT_SPEED = PORT_SPEED_FAST;
initStruct.PORT_FUNC = PORT_FUNC_MAIN;
initStruct.PORT_Pin = PORT_Pin_All;
PORT_Init (MDR_PORTA, &initStruct);
//--------------------------------------------//
// Address PF3-PF15 (A0..A12), A0 - not used. //
//--------------------------------------------//
initStruct.PORT_FUNC = PORT_FUNC_ALTER;
initStruct.PORT_Pin = PORT_Pin_4 | PORT_Pin_5 |
PORT_Pin_6 | PORT_Pin_7 |
PORT_Pin_8 | PORT_Pin_9 |
PORT_Pin_10 | PORT_Pin_11 |
PORT_Pin_12 | PORT_Pin_13 |
PORT_Pin_14 | PORT_Pin_15;
PORT_Init (MDR_PORTF, &initStruct);
//--------------------------------------------//
// Address PD3..PD0 (A13..A16) //
//--------------------------------------------//
initStruct.PORT_FUNC = PORT_FUNC_OVERRID;
initStruct.PORT_Pin = PORT_Pin_0 | PORT_Pin_1 |
PORT_Pin_2 | PORT_Pin_3;
PORT_Init (MDR_PORTD, &initStruct);
//--------------------------------------------//
// Address PE3, PE4 (A17, A18) //
//--------------------------------------------//
initStruct.PORT_FUNC = PORT_FUNC_ALTER;
initStruct.PORT_Pin = PORT_Pin_3 | PORT_Pin_4;
PORT_Init (MDR_PORTE, &initStruct);
//--------------------------------------------//
// Control PC0,PC1 (nWE,nOE) //
//--------------------------------------------//
initStruct.PORT_FUNC = PORT_FUNC_MAIN;
initStruct.PORT_Pin = PORT_Pin_0 | PORT_Pin_1;
PORT_Init (MDR_PORTC, &initStruct);
//--------------------------------------------//
// Control PC2 (nCE) //
//--------------------------------------------//
initStruct.PORT_PD = PORT_PD_DRIVER;
initStruct.PORT_OE = PORT_OE_OUT;
initStruct.PORT_FUNC = PORT_FUNC_PORT;
initStruct.PORT_Pin = MDB_SRAM_CE;
PORT_Init (MDR_PORTC, &initStruct);
//--------------------------------------------//
// Initialize EBC controler //
//--------------------------------------------//
EBC_DeInit();
EBC_StructInit(&EBC_InitStruct);
EBC_InitStruct.EBC_Mode = EBC_MODE_RAM;
EBC_InitStruct.EBC_WaitState = EBC_WAIT_STATE_3HCLK;
EBC_InitStruct.EBC_DataAlignment = EBC_EBC_DATA_ALIGNMENT_16;
EBC_Init(&EBC_InitStruct);
EBC_MemRegionStructInit(&EBC_MemRegionInitStruct);
EBC_MemRegionInitStruct.WS_Active = 2;
EBC_MemRegionInitStruct.WS_Setup = EBC_WS_SETUP_CYCLE_1HCLK;
EBC_MemRegionInitStruct.WS_Hold = EBC_WS_HOLD_CYCLE_1HCLK;
EBC_MemRegionInitStruct.Enable_Tune = ENABLE;
EBC_MemRegionInit (&EBC_MemRegionInitStruct, EBC_MEM_REGION_60000000);
EBC_MemRegionCMD(EBC_MEM_REGION_60000000, ENABLE);
// Turn ON RAM (nCE)
PORT_ResetBits (MDR_PORTC, MDB_SRAM_CE);
}
Mikrokontroler dalam paket LQFP-144 dan memori dalam paket TSOP-44 memiliki banyak pin yang terhubung dan memakan banyak ruang PCB. Memiliki pengalaman dalam memecahkan masalah pengoptimalan di bidang ekonomi, jelas bagi saya bahwa sirkuit mikro ini harus ditempatkan di papan tulis terlebih dahulu. Di berbagai sumber, saya menemukan ulasan pujian tentang
Sablon adalah elemen penting dari papan sirkuit tercetak. Di papan debug, tidak hanya harus ada tanda tangan untuk komponen elektronik, tetapi semua konektor harus ditandatangani. Di sisi belakang papan, saya menempatkan memo tabel dengan fungsi port pengontrol (utama, alternatif, diganti, aktual). Saya memesan pembuatan papan sirkuit tercetak di China di kantor PCBWay yang terkenal. Saya tidak akan memuji, karena kualitasnya bagus. Mereka bisa berbuat lebih baik dengan toleransi yang lebih kecil, tapi
Papan sirkuit cetak yang diproduksi MDB1986, (c) Foto oleh penulis
Saya harus menyolder komponen "di lutut" dengan besi solder 40 watt dan solder POS-61, karena saya jarang menyolder, 1-2 kali setahun, dan pasta solder mengering. Saya juga harus mengganti pengontrol CS32F103 China ke STM32F103 asli, dan kemudian juga mengganti memori. Secara umum, sekarang saya sangat puas dengan hasilnya, meskipun saya belum memeriksa pengoperasian RS-232 dan CAN.
Debug papan MDB1986 dalam operasi β bersinar dan hangat, (Ρ) Foto oleh penulis
Di situs "Milandra" Anda dapat menemukan cukup banyak
Memikirkan MilandraMikroelektronika di Rusia sedang berkembang, dan perusahaan "Milandr" memainkan peran penting dalam proses ini. Mikrokontroler baru yang menarik muncul, misalnya, 1986BE81T dan Elektrosila dengan antarmuka SpaceWire dan MKIO (sama seperti pada 1986BE1 dan, mungkin, dengan masalah yang sama), dll. Tetapi untuk siswa biasa, guru, dan insinyur sipil, tidak realistis membeli sirkuit mikro semacam itu. Artinya komunitas teknik tidak akan dapat dengan cepat mengidentifikasi kesalahan dan masalah chip ini. Tampak bagi saya bahwa pertama-tama perlu memproduksi sirkuit mikro dalam wadah plastik, mendistribusikannya di antara semua pihak yang berkepentingan, dan hanya setelah persetujuan (Latin approbatio - persetujuan, pengakuan) spesialis dapat menyiapkan revisi dalam wadah keramik-logam dengan perlindungan dari semua faktor yang mengerikan. Saya berharap dalam waktu dekat kita SEMUA akan senang dengan proyek-proyek baru yang diumumkan di pameran.
Siapa pun dapat mengulang, memodifikasi, dan menggunakan papan debug yang saya kembangkan dalam proses pendidikan. Pertama-tama, saya membuat papan untuk diri saya sendiri, tetapi ternyata sangat bagus
K1986BE1QI (udara) adalah pengontrol yang sangat menarik dengan antarmuka unik yang dapat digunakan di universitas untuk mengajar siswa. Saya pikir setelah mengoreksi kesalahan yang teridentifikasi dalam pengontrol dan lulus uji sertifikasi, pengontrol akan terbang dalam arti yang sebenarnya!
Sumber: www.habr.com