Note to self: How to flash .bin files via “raw” gdb

At the first glance, it’s a very easy task. However it has a number of less obvious pitfalls when you’re working with microcontrollers via some kind of gdb stub or openocd and the memory you’re actually uploading your .bin file is the flash memory of an MCU (e.g. stm32). I decided to gather the common pitfalls in a single blog post.

Typical starter kit: A Chinese stlinkv2 clone flashed as black magic probe and an stm32f4 discovery board
(more…)

How to use Xiaomi Aqara and keep you privacy

This is my second note about Xiaomi Aqara smart home stuff. Something tells me it’s not the last one. In this note I’ll tell about implementing home automation that will reliably work offline using readily available hardware from Xiaomi and (at the same time) keeping your privacy intact. After all, not everyone is ready to share all the private stuff with some corporate crooks 😉

(more…)

Adding enclosure for Xiaomi Aqara light switches

There are some pretty good smart light switches called Xiaomi Aqara. It’s basically a light switch with a relay and Zigbee wireless interface inside. They are integrated with Xiaomi zigbee gateway and can be remotely controlled. Zigbee gateway uses them as a proxy in case the battery-powered sensor is not in the direct range. This post will be about adding a better wall-mount box for those little things.

(more…)

Getting rid of wireporn in the bathroom

I have three devices in my bathroom: electric razor, trimmer for my beard and an electric toothbrush. Each of them comes with its own power brick and compete for a single 220v outlet. As a result I caught myself multiple times when at as one item of these is completely out of charge. Or, worse, the power bricks end up in a huge mess-o-wires you have to untangle. (like, the one you see on the left side of the photo below). And, since I deal with this in the morning when I’m in a rush to get myself out to work it’s even more annoying. At some moment I decided to fix that. I didn’t want to add more 220v outlets, since:

a). It’s quite difficult in that particular case
b). I didn’t want to keep all power bricks plugged all the time any way – I never really trust cheap power bricks and for a reason!
c). The total length of the wires gathering dust would re
main intact
d). I needed a shelf for these anyway 😉

Therefore,  armed with a 3d-printer and aliexpress I decided to make it a bit different. The result you can see on the right half of the photo below. Build details follow.

Besides, if you liked this design, you can grab it on my thingiverse (link at the very bottom of this post).

(more…)

Cloning complex 2d shapes with inkscape, freecad and 3d-printer

This small tutorial will cover how to clone complex 2d parts with a flatbed scanner, inkscape and freecad. You may use this for any complex shapes that are too tough to measure using calipers. This technique can also be used to reverse-engineer complex PCB shapes to aid in creating custom enclosures. As a small example I’ll clone part of my archery fingertab.

 

(more…)

MediaDeb: Debian For Mediatek Cellphones

In this small note I’ll tell you how to turn an old MediaTek SoC-based cellphone,(The one that’s probably gathering dust somewhere on your shelf, with no updates from vendor) into… a server running Debian Stretch! I’ve done this for UMI-X2 and iOcean X8 and you can download ready to flash firmware for these devices at the bottom of this post. Since a typical Chinese mtk cellphone now features 2GB or more RAM and 4 or more ARM cores the result packs way more performance than a typical Raspberry PI.

(more…)

The painfull verilog preprocessor pitfall

Just a little note about how includes and `defines work in verilog which is VERY different from how they behave in most programming languages. This may not really hurt in a small project, but can become a real PITA in a big project with a dozen of third-party blocks.

TL;DR: Macro defines are have a global scope in verilog and propagate from file to file during one tool invocation.

(more…)