Project update 8 of 9
Hello supporters and backers!
CaribouLite finished production. The testing is delayed due to Covid in China, as the testing process requires a human in the loop. We intended to supply the boards by Christmas, but unfortunately we missed this goal, and the supply will be delayed a little further to February (hoping for the health and well-being of our contract manufacturer’s workers).
To fully comply with the "open source hardware" concept, we decided to open the production and testing process. Call it an "Open Source Production".
As we all understand now, the complexity of a hardware product is not necessarily about the idea or the prototype implementation. It is mostly about production and manufacturing. Within the production process, there is the important stage of "testing and programming" that verifies each board to be supplied to a customer. The main goal is to perform the fastest test procedure that minimizes the chance of supplying a faulty board to virtually zero. The secondary important goal is to learn the product and the production process’s mass volume issues to improve yield and quality in subsequent batches.
This process needs to be built carefully to support both of those important goals, without making the testing process too long and expensive. Additional goals of a well-designed production process are simplicity (building a simple-to-operate tester), visibility (letting engineers see the process to efficiently support the production process when an exception occurs), along with others.
In the following video links, you can see the latest batches of CaribouLite. Currently, all the boards are fully assembled (SMT and TH), and all additional material is ready for packaging. The testing procedures and equipment have been in our CM’s premises during the last month, but we are still missing the operating personnel due to the COVID outbreak in China. As it seems, this will be resolved in the following few days.
The testing process includes the following stages:
The whole process should take around 2-3 min per board, and we hope this goal shall be reached to support the fastest finalization of the process (~2-3 8-hour work days)
To support the above goals, the testing and programming process is registered in a dedicated GitHub repository. This repository shall be open to the public shortly, and it already contains the following sub-directories:
Once this repository is open to the public, everyone will be able to search their CaribouLite board (based on its unique identification - GUID) and find its testing log and history. In addition, we plan to analyze the results and learn from the process, on the build quality, numerical results (current, power, etc.), and testing timeline - all of which are registered and pushed to the git repo.
By doing this, we’ve created open-source production data. We hope it will be interesting to you to explore.
In addition to the software (currently in the "develop-R1" branch - to be merged back to "main"), we built a dedicated power testing and monitoring hat. Then we realized that it also should be open-sourced as it can be a very useful tool for the Raspberry Pi community (and the RPI-like board users - Jetson-Nano, etc.). It is called the "RPI-HAT-Power-Monitor" or just "hat-powermon".
Power Monitor Assembly with a HAT
It sits between the HAT and the RPI 40-pin connector and is in charge of:
It has C/C++/Python APIs through the I2C interface. See the repository at: https://github.com/cariboulabs/rpi_hat_power_monitor.git
Assemble it, use it, modify it as needed, and have fun with it.
As you may have noticed, the CaribouLite main software repository has been split into a separate branch called "develop-R1". This branch is the most up-to-date code base and is going to be merged later on in the main branch.
In this branch, we rethought many parts of the software and firmware. We introduced a new SMI kernel driver that was designed with versatility in mind. It supports the ability to stream asynchronously and can be easily adapted to other HATs. That’s why we built it on top of the existing Broadcomm’s official bc2835_smi kernel module. Our module - smi_stream_dev - replaces the legacy bcm2835_smi_dev driver and adds to it "poll", and "select" APIs, KFIFO support for low latency DMA configuration upon transmission events, and more.
The resulting device can be accessed through the "/dev" directory, and it is backward compatible with the older device driver.
To support the streaming API and improve streaming speed, the User-Mode SMI drivers were also redesigned and split into the generic stream driver and the CaribouLite-specific functionality.
The CaribouLite software package basically contains the following:
Within the "Various Utilities," we have compilation/deployment supporting software and scripts, testing and production application, and examples with C / Python.
Recently, we added a CLI-like user-prompting application -
cariboulite_app that gives the user the ability to access the CaribouLite inner parameters and functions. Most of its functionality can be accessed, of course, through the C API, but we wanted to give a mixture of "examples" and "testing" capabilities in an SSH terminal.
With it, you can output signals of different power levels, read and write registers and check FPGA’s inner states. It also provides good coding references and snippets for those who would like to access CaribouLite through its C-API.
Once we started testing various SoapySDR-Based custom software (C++) demodulators and signal processing, we thought - can we develop the algorithms on a PC and deploy them on an RPI? An RPI4 is a real workhorse, but it can never compete with a modern PC. In addition, we may want to have a remote development but use better-debugging capabilities than an RPI can provide.
To cope with this, we gave a try to the SoapySDRServer, and it worked like magic. Imagine… You put deploy an RPI + CaribouLite on your roof, close to the antenna. Connect a 1Gbit Ethernet cable to it (or just count on the WiFi). Prepare a cup of coffee with milk, and develop Python / C++ algorithms on your PC, having debugging, visualization, MATLAB, or Python NumPy crunching numbers on your PC rather than in the RPI. Then, after the algorithms are ready, you deploy them on the RPI and run them.
Once you run the SoapySDRServer on your RPI, upon a request from a distant computer, it streams all IQ and metadata through its network interfaces (UDP I suppose). Kudos to the Soapy team, https://github.com/pothosware/SoapyRemote.git
And one more thing… the GnuRadio Soapy plugin also works pretty well, out of the box, thus it is fully usable with CaribouLite. And the SoapyRemote can also be used for that.
We are super-excited and waiting for the CaribouLites to be supplied as soon as possible, and are very optimistic about the following month to finalize the process with our CM. They are doing their best, having completed the assembly process with minimal manpower, and we are grateful for that!
And we would like to wish you a great new year!!!
CaribouLite RPi HAT is part of Qorvo RF Accelerator