EdgePro1 is all about power and simplicity. The board was designed to fit between low-level microcontroller boards (think Arduino style) and full fledged Linux capable Single-Board-Computers or SBCs. It is an IoT capable device with WiFi/BLE communication, some external storage (8 MB - mega bytes of it) and of course a security chip to protect sensitive data going in and out. Because there are numerous similar boards out there, the question is how to differentiate from those other boards. The first thing is the size of the board. It is a tiny board. A size of a classic Lego brick, i.e. 32 mm by 16 mm. Every additional square centimeter of FR4 material (we don't need), means additional 1.77 grams of carbon footprint and if this is multiplied by billion devices, you'll get the picture. The other advantage is the shear power of this thing. It is actually a triple core system. Main CPU is NXP i.MX RT1064 with 600 MHz Cortex M7, 4 MB of XiP Flash and 1 MB of static RAM, which includes a 512 KB of Tightly-Coupled-Memory (TCM). Later is capable of running at CPU speeds without the use of cache memory. The U-Blox Nina W102 communication module has additional two Tensilica 240 MHz cores together with 520 KB of RAM and 2 MB of Flash. All this power is supplied by 1.2 A DC-DC converter, which is more than enough for the board and it can also supply external devices, through the dedicated pin. To communicate with the device, a Micro USB connector is used. 17 GPIOs and a RGB LED are available to connect the board with the outside world.
The main challenge of designing the board was the PCB layout design. Due to a very small size and complex BGA components, a 4 layer design was choosen. With the help of a superb KiCad EDA tool and a lot of late night work, the layout was completed successfully. There were moments when a 6 layer design was considered:).
PCB design in 3D:
With the help of local EMS, ten prototype boards were successfully produced. Getting the components was a challenge on itself. Big thanks to NXP, Avnet, Microdis and L-Tek.
FirmwareA lot of thinking went in to decide which operating system should run on the EdgePro1. Finally decision was made to use a NuttX Real Time Operating System. Why? It is a POSIX compliant, highly configurable and easy to maintain operating system. At that time a port for i.MX RT1064 was not available, although a port for RT1062 was. Also a FlexSPI driver for the external storage was not available too. So a decision was made to contribute to a NuttX OS and develop a missing port and driver (Pull Request #3462 and #3463).
To ease the development of applications and gain popularity with those not familiar with native programming, some kind of an interpreter should be used. In the world of Micropython, Circuitpython, and other small interpreters, a decision was made to use something different. It needs to be small, efficient and most importantly fast. Very fast. LuaJIT is one of the fastest interpreters in the world. It uses Just-In-Time Compiler (JIT) for the Lua programming language. JIT compilers are capable of generating machine code from bytecode on the fly. The only problem is, that it is not supporting an ARMv7-M architecture (Thumb instruction set). All Cortex M7 microcontrollers use ARMv7-M (ARMV7E-M) architecture. What now? No problem. Let's contribute to a LuaJIT also. Well, this turned to be the biggest underestimation in my life. It took me a lot of time to succeed. LuaJIT is a very complex piece of technology. But at the end, everything was worth it. A lot of learning and satisfaction was gained from it.
ShowtimeNow we have NuttX and LuaJIT working, let's do something with it. Hello World program would do it just fine. Plugging USB cable to the board would power the thing. No smoke, no lights. Thumbs up. This is expected. Opening serial console application with proper settings (baudrate 115200 8N1) on a PC and pressing the Enter key three times should bring NuttX Shell command line up.
Success!
Let's now fire the LuaJIT REPL with typing luajit
.
Now we are sending the commands to LuaJIT program directly. Type =print("Hello World, EdgePro1!")
to a command line.
Success!
Thank you. Follow us on https://www.crowdsupply.com/edgepro/edgepro1
Comments
Please log in or sign up to comment.