July 2018

Si4463 Wireless Library: A Wireless Communication Solution for AVR and Arduino

This is a library for the Silicon Labs Si4463 wireless IC, which has been used in (or will be used in) some of my projects. The Si4463 offers various configuration options, including modulation, data packet format, and CRC algorithm, and can output up to +20dBm (100mW) of power. Additionally, the Si4463 is also used in many pre-made modules, such as the HopeRF RFM26W and the Dorji_Com DRF4463F. The entire Si446x transceiver series should also be compatible with this library.

This library allows users to configure the chip to send and receive variable-length data packets (up to 128 bytes) and trigger callback functions when events occur (such as receiving new data packets and completing data packet transmission). These callback functions run directly from the interrupt routine, making the program’s response to events much faster than with polling libraries.

Download from GitHub
Documentation

Pinout

Si4463ATmega328Arduino UnoArduino MegaDescription
VCC3.3V3.3V3.3VPower (3.3V)
GPIO0
GPIO1
SDOB4 (18)1250SPI MISO
SDIB3 (17)1151SPI MOSI
SCLKB5 (19)1352SPI SCK
NSELB2 (16)1010

Hacking RAM SPD Data: A Step-by-Step Guide


I recently purchased some low-power Mini-ITX motherboards, including the Gigabyte GA-N3050N-D3H and Biostar N3050NH. These motherboards use SO-DIMM DDR3 RAM, commonly found in laptops.

Although these two motherboards are very similar, the Gigabyte motherboard lacks some BIOS features and settings compared to the Biostar motherboard. One of the missing features is the inability to set the RAM frequency. I want to run the RAM at a minimum frequency of 800MHz, but the Gigabyte motherboard runs it at the normal frequency of 1600MHz. This means that the Biostar motherboard can reduce idle power consumption by about 0.12W, or around 2%, with just a simple switch.

To solve this problem, I need to modify the RAM’s Serial Presence Detect (SPD) data. The SPD data is a set of configuration parameters stored in a small EEPROM chip, which the BIOS reads during boot-up. Fortunately, the SPD EEPROM communicates using SMBus, which is largely compatible with I2C on Arduino.

The SPD EEPROM

Modifying the RAM’s SPD data is not a new concept, and there are already many tools and programs available online that can perform SPD operations. However, the software and hardware compatibility…

MCP2221/MCP2221A USB Converter Open Source HID Library

This is an open-source library that aims to provide a multi-platform interface solution for interacting with Microchip’s MCP2221/MCP2221A USB-to-UART and I2C/SMBus serial converters. The library supports access to various functions of the converter, including 4 GPIO pins, 3 10-bit ADCs, and 1 5-bit DAC. Unlike Microchip’s proprietary DLL library, this project aims to provide an open-source, cross-platform alternative.

This library also makes use of HIDAPI.

Supported features:

FeatureStatus
ADCSupported
DACSupported
GPIOSupported
Interrupt inputSupported
Clock reference outputSupported
USB Descriptors
(Manufacturer, product, serial, VID, PID)
Supported
I2C/SMBLimited support, WIP
Flash password protectionNot yet implemented
C++ and C# wrappersNot yet implemented

Download from GitHub
Documentation

Bits of info about the MCP2221

  • Doesn’t use a crystal, only requires 1 small capacitor when powered with 3.3V or 2 capacitors when powered with 5V.
  • Available in a hacker friendly DIP package.
  • Has a remote wake function which when used in conjunction with the interrupt input can be used to wakeup the USB host (usually a PC), just