Posts

Review and Setup of the A7670E LTE Modem on Linux

Image
Features: Connectivity : GSM/GPRS/EDGE: 900/1800 MHz and LTE-FDD: B1, B3, B5, B7, B8, B20. Navigation : Includes an input for a GNSS antenna for satellite positioning. Data Rates : Over LTE — Downlink up to 10 Mbps, Uplink up to 5 Mbps. Over EDGE: up to 236.8 Kbps in both directions. Power Supply : 3.4 V to 4.2 V — perfectly matching the operating voltage range of Li-Ion batteries. Interfaces : USB — the module emulates a network card (RNDIS) and UART. There is also a separate, “real” UART. However, it lacks an analog audio interface for sound and a microphone. Card Slot : A standard, convenient NanoSIM slot is soldered onto the board. In addition to the micro-USB connector, the board features a standard 7-pin header. Here is their pinout: Letter Function G Ground (GND) R UART RX T UART TX K Module power control (Power Key) V Power (VCC) G Ground (GND) S Sleep — this pin can be used to put the modem into deep sleep mode for minimal power ...

Power-Off Reset: How to Unbrick the CH32V003 in a SOP-8 Package

Image
I continue to explore CH32V microcontrollers. Today, I have the tiny CH32V003J4M6 in a SOP-8 package on my desk.   This is the smallest package with a bare minimum of pins — 2 are for power, leaving 6 available for use. It doesn’t even have a hardware reset pin (NRST). Like other microcontrollers in the CH32V00x series, it is programmed via a single SWIO wire ( pin 8 ). And here lies an interesting problem: if you initialize this pin in your firmware for other tasks, it stops working as SWIO. After that, programming the chip using the standard method becomes impossible. For example, the following code prints “Hello world” to the 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 ( 96...

How to Minimal-Boot and Flash CH32V203C8T6 on an Adapter Board

Image
I received a large batch of CH32V203C8T6 microcontrollers. And a question arose: how do I check if these microcontrollers are good? There are no ready-made device boards available at the moment, but they still need to be tested somehow. Fortunately, I have a few LQFP48 to PGA adapter boards. I haven’t had to solder such complex chips before. I’ll try using a mini-oven for the soldering process. Additionally, I’ll need solder paste. I have a tube that has been sitting around for quite a while. I once tried it on some small parts and put it aside, thinking that one day I’d be soldering serious stuff and this paste would come in handy. Several years have passed, and that moment has come. But as it turns out, solder paste can dry up, especially if the tube isn’t sealed tightly :) It used to be almost liquid, but now it feels like playdough. I managed to squeeze some out and smear it across the adapter. This is my first time soldering packages like this, let alone using bottom heating...

Orange Pi Zero 3W overview and first start

Image
I’d like to talk about the new “little orange” — the Orange Pi Zero 3W , which was released this year. Specifications: SoC : Allwinner A733 CPU : 2 x Arm Cortex-A76 cores (up to 2.0 GHz) + 6 x Arm Cortex-A55 cores GPU : Imagination PowerVR BXM-4-64 MC1 (Supports OpenGL ES 3.2, Vulkan 1.3, OpenCL 3.0) Neural Processing Unit : Up to 3 TOPS @INT8 ; supports mixed-precision computation (INT8, INT16, FP16, and BF16) Coprocessor : Xuantie E902 RISC-V Real-Time Coprocessor (up to 200 MHz) RAM : 4/8/12/16 GB LPDDR5 Storage : Onboard footprints for eMMC and UFS are available, but there are currently no boards for sale with them populated. Of course, there is a TF card slot Wireless Connectivity : Wi-Fi 6 and Bluetooth 5.4 (BLE) with an external antenna Video Output : Mini HDMI 2.0, 4-lane MIPI-DSI, Type-C (Supports DisplayPort Alt Mode, up to 4K@60fps) Video Input : Two 4-lane MIPI CSI interfaces PCIe : 1 x PCIe 3.0 1-Lane FPC connector GPIO : 40-pin expansion header (supporting G...

Android UI in 3D: Rendering Jetpack Compose on OpenGL Surfaces via VirtualDisplay

Image
While the use cases for this technique are fairly specialized, I want to demonstrate how to render the Android UI onto OpenGL surfaces using the Virtual Display mechanism. Key Concepts: Display — An object that describes a logical display. It contains the characteristics of real, networked, or virtual screens connected to an Android device. Documentation . VirtualDisplay — A type of display that renders images to a specific memory buffer, called a Surface, rather than a physical panel. Documentation . DisplayManager — An Android system service that manages all available displays, allowing you to query their characteristics and create virtual ones. Documentation . Presentation — A specialized component based on the Dialog class. It doesn’t have its own full lifecycle (unlike an Activity), which simplifies management, and it is specifically designed to output content to any secondary display. Documentation . Rendering with OpenGL To begin, let’s create a simple example that...