Публікації

Як працює розбиття Flash-пам’яті в ESP32

Зображення
Організація Flash-памʼяті в ESP32 дуже нагадує мені те, як це було з жорсткими дисками на ПК за часів MBR. Там так само є завантажувач, таблиця розділів і, власне, розділи з даними. І яким би не був розмір флешу, правила розбиття не змінюються. Зазвичай таблиця розділів починається за адресою 0x8000 і займає 4 КБ. Але в деяких випадках може знадобитись більший розмір завантажувача, і доводится здвигати таблицю розділів далі. Cтруктура одного запису в таблиці розділів виглядає так: struct PartitionEntry { uint8_t magic ; // Магічне число для валідації запису uint8_t type ; // Тип розділу uint8_t subtype ; // Підтип розділу uint8_t reserved ; // Зарезервовано uint32_t offset ; // Зсув розділу у флеш-пам'яті uint32_t size ; // Розмір розділу char name [ 16 ]; // Ім'я розділу uint32_t flags ; // Прапори розділу }; Проте не варто жорстко на неї спиратися, у різн...

Як додати підтримку CH32V до Platform.IO

Зображення
CH32V — це доволі дешеві мікроконтролери архітектури RISC-V від WinChipHead (Nanjing Qinheng Microelectronics). Також є CH32F — це мікроконтролери на архітектурі ARM. Для початку нам знадобляться дві речі: Відлагоджувальна плата (девборда) CR-CH32VXX з CH32V003 — це один із найдешевших мікроконтролерів. Та WCH-LinkE — програматор для CH32V. У продажу є прості WCH-Link , але для серії CH32V00x вони не підходять, бо вона використовує однодротовий протокол програмування та відлагодження. А він підтримується лише в дорожчому WchLinkE. До речі, є проєкти, які з RP2040 роблять подібний програматор, але офіційні утиліти (MounRiver Studio) не підтримують нічого, окрім WCH-Link. Але я і не використовую офіційну IDE. Тому, напевно, найближчим часом спробую це зробити та описати методику. Чому я використовую PlatformIO, а не MounRiver Studio? З одного боку, MounRiver Studio є для Linux, який є моєю основною ОС для роботи. Але з іншого — коли я спробував її встановити і вона почала вима...

Огляд та запуск LTE-модему A7670E під Linux

Зображення
Характеристики: МГц та LTE-FDD: B1, B3, B5, B7, B8, B20. Зв’язок : GSM/GPRS/EDGE: 900/1800 Навігація : є вхід з GNSS-антени для супутникового позиціонування. Швидкість передачі : по LTE — завантаження (Downlink) до 10 Мбіт/с, віддача (Uplink) до 5 Мбіт/с. По EDGE: до 236.8 Кбіт/с в обидві сторони. Живлення : від 3.4 до 4.2 В — якраз у діапазоні робочої напруги Li-Ion акумуляторів. Інтерфейси : USB — модуль емулює мережеву карту (RNDIS) та UART. Ще є окремий “справжній” UART . А ось аналогового аудіоінтерфейсу для звуку та мікрофона тут немає. Слот для картки : на платі розпаяний звичайний зручний слот під NanoSIM. Окрім роз’єму micro-USB, на платі є стандартна гребінка pinhead на 7 контактів. Ось їхнє призначення: Літера Призначення G Земля (GND) R UART RX T UART TX K Керування живленням модуля (Power Key) V Живлення (VCC) G Земля (GND) S Sleep — за допомогою цього піна можна переводити модем у режим глибокого сну з мінімальним спож...

Power-Off Reset: Як розблокувати CH32V003 у корпусі SOP-8

Зображення
Продовжую розбиратися з мікроконтролерами CH32V. Сьогодні в мене на столі малюк CH32V003J4M6 у корпусі SOP-8. Це найменший корпус із мінімумом пінів — 2 йдуть на живлення, і 6 залишаються доступними для використання. У ньому немає навіть піна апаратного скидання (NRST). Як і інші мікроконтролери серії CH32V00x, він програмується по одному дроту SWIO ( 8-й пін ). І ось тут криється цікава проблема: якщо ініціалізувати цей пін у прошивці під інші задачі, він перестає працювати як SWIO. Після цього запрограмувати чіп стандартним способом стає неможливо. Наприклад, такий код виводить “Hello world” в UART: #include <ch32v00x.h> #include <debug.h> void NMI_Handler ( void ) __attribute__ (( interrupt ( "WCH-Interrupt-fast" ))); void HardFault_Handler ( void ) __attribute__ (( interrupt ( "WCH-Interrupt-fast" ))); int main ( void ) { SystemCoreClockUpdate (); Delay_Init (); USART_Printf_Init ( 9600 ); while ( 1 ) { ...

CH32V203 запуск з нуля

Зображення
Отримав велику партію мікроконтролерів CH32V203C8T6. І виникло питання: як перевірити, що це нормальні мікроконтролери? Готових плат для пристроїв наразі немає, а перевірити якось треба. На щастя, є декілька перехідників з LQFP48 на PGA. До цього такі складні чіпи мені паяти не доводилося. Для впаювання спробую використати мініпічку. Окрім того, знадобиться паяльна паста. У мене є тюбик, і він вже давно лежить. Спробував його з якимось дріб’язком і відклав із думкою, що колись буду паяти серйозні штуки, і ця паста мені знадобиться. Минуло декілька років, і цей момент настав. Але, як виявилося, паста може пересихати, особливо якщо тюбик не закрити ретельно :) Раніше вона була майже рідкою, а зараз - як пластилін. Якось вичавив та розмазав її по перехіднику. Пайку таких корпусів, та ще й на нижньому підігріві, роблю вперше — лише бачив на ютубі, як це робиться. Тому ані пропорцій, ані навичок у мене немає. Далі одразу ставимо мікроконтролер CH32V203 так, щоб його відмітка 1-го пін...

Огляд Orange Pi Zero 3W

Зображення
Хочу розповісти про нову «апельсинку» — Orange Pi Zero 3W , яка вийшла цього року. Її характеристики: SOC : AllWinner A733 CPU : 2 ядра Arm Cortex-A76 (до 2.0 ГГц) + 6 ядер Arm Cortex-A55 GPU : Imagination PowerVR BXM-4-64 MC1. Підтримка OpenGL ES 3.2, Vulkan 1.3, OpenCL 3.0 NPU (Нейронний процесор) % До 3 TOPS @INT8 , підтримка обчислень змішаної точності з INT8, INT16, FP16 та BF16 Сопроцесор : Xuantie E902 RISC-V Real-Time Coprocessor (до 200 МГц) Оперативна пам’ять : LPDDR5 на 4/8/12/16 ГБ Накопичувачі : передбачено посадкові місця для eMMC та UFS, проте зараз у продажу плат із ними немає. Звісно, є слот для TF-карти Бездротовий зв’язок : Wi-Fi 6 та Bluetooth 5.4 (BLE) із зовнішньою антеною Відеовиходи : Mini HDMI 2.0, 4-lane MIPI-DSI, Type-C (підтримка DisplayPort Alt Mode, до 4K@60fps) Відеовходи : два інтерфейси 4-lane MIPI CSI PCIe : один роз’єм PCIe 3.0 1-Lane FPC GPIO : 40-піновий роз’єм розширення (GPIO, UART, I2C, SPI, PWM) Живлення : через type-C 5V до 3A ...