Despite the Arduino YUN was presented just recently, already a new board that is compatible with GNU/Linux has been released. This one is based on x86 technology and made by Intel, the leader of this technology.
Evolution of embedded technologies could be considered a fact if a giant like Intel decided to participate with his “interpretation” of the phenomenon. Embedded technology combines the power and flexibility of an operating system such as GNU/Linux and the ability to manage peripheral I/Os according to the typical specifications of the microcontroller, all made with architectures equipped with one or more processors.
“Galileo” is based on the Intel Quark X1000 SoC, a system built around a 32 bit Pentium class processor, single-core, single-thread, compatible with ISA architecture (Instruction Set Architecture), which works at speeds up to 400 MHz. Galileo is the first Intel board designed to be hardware and software compatible with the specifications of Arduino Uno R3. De facto a small PC that you can assemble with shields designed for Arduino. The pinout is compatible with Arduino Uno, and the I/O terminals can work at either 5-V to 3.3 by placing a jumper, which activates the level converters for each pin. The native voltage is 3.3V, the 5V is obtained with the conversion. While “Galileo” is software compatible with Arduino’s IDE, the operating system is a GNU/Linux distribution, which “runs” on the board only processor. The Arduino sketches are run as processes in the user space of the GNU/Linux operating system. The available IDE compiles the sketches in “.elf” format, an executable binary format, originally developed by UNIX System Laboratories and commonly used in GNU/Linux.
Intel Galileo Specification
Being developed from a family of PC processors, the “Galileo” board has a whole series of connectors, bus and doors, typical of PCs standard, which are added to the classic Arduino’s devices.
Look at the block diagram of the board: a mini-PCI Express connector, one 100 Mb Ethernet port, a slot for a Micro-SD, RS-232 serial port, a USB Host port and a USB Client port can be spotted. There is also a 8Mbyte flash NOR memory.
Galileo requires a 5V supply by the coaxial power connector. In this regard there is a recommendation clearly highlighted in the Intel instructions: it is important to give power to the board by the power connector before connecting it to a PC for programming by USB cable, otherwise you could damage the board itself.
These are the main features of Galileo’s architecture:
-
Intel Pentium 400MHz 32-bit in ISA architecture (instruction set architecture) with 16 KBytes of L1 chache, 512 KByte embedded SRAM;
-
Real Time Clock (RTC) integrated. To keep it permanently active simply connect a 3V button battery to the appropriate pin;
-
Connector Ethernet 10/100 Mb;
-
One slot PCI Express mini-card in the PCIe 2.0 standard that can accommodate mini-PCIe cards half-height, possibly with an adapter. The slot has been designed specifically to connect a WiFi card usable with the WiFi library;
-
USB Host connector 2.0 able to support up to 128 USB devices;
-
A USB client connector that can be used both for downloading the sketch on the board and connecting USB 2.0-compatible devices;
-
Standard JTAG connector with 10-pin for debugging;
-
Button to reboot the processor;
-
Button to reset the Arduino’s sketch only;
-
Mass Storages – A 8 MB Legacy SPI Flash memory where is stored the GNU / Linux bootloader and the last sketch loaded. For the sketch could be reserved from 256Kbyte to 512KByte memory. A 512-Kbyte SRAM and 256 MB DRAM memory managed directly by the operating system;
-
A 11-Kbyte EEPROM memory that can be programmed from the sketchs with the EEPROM library;
-
A slot for a micro SDCard up to 32GByte capacity;
-
The USB Connector can accommodate all types of mass storage devices compatible with USB 2.0 standard;
-
3.5mm jack connector allows you to use a second serial port standard UART. Notice that this is not an audio input / output.
Galileo Arduino-compatible connector
Let’s look in more detail the devices compatible with Arduino’s architecture;
-
14 pin reproducing Arduino’s I/O inputs, six of which can be used as PWM output (Pulse Width Modulation). Each of the 14 pin can be configured as input or output using the classic pinMode, digitalWrite, and digitalRead. Pins support both 5 and 3.3 V levels and a current of 10mA output and 25mA input. Pull-up resistor can be configured from 5.6K to 10k Ohm and turned off by default configuration;
-
Analog input pins, A0 to A5, are connected to a AD7298 integrated. Each pin provides 12-bit resolution (4096 values between 0 and 5V);
-
Pins A4 and A5, respectively SDA and SCL, support the communication protocol I2C (TWI) and can be interfaced with the Wire library;
-
The SPI bus is configured to 4MHz for compatibility with Arduino’s boards but may be increased to 25MHz. Galileo board can operate only as a master in SPI communication.
-
UART, the serial port is connected to pins 0 (RX) and 1 (TX);
-
ICSP 6-pin connector for in-circuit programming, is positioned on the board in order to be compatible with the existing shields;
-
VIN pin allows to give power to the board directly instead of using the coaxial power connector. You must provide a voltage stabilized to 5V, otherwise you could damage the board;
-
5V output pin provides a maximum current of 800mA;
-
3.3V output pin provides a maximum current of 800mA;
-
GND ground pin;
-
IOREF pin can be configured to 3.3V or 5V by a jumper selector;
-
RESET led to LOW level allows the reset of the sketch. It is used to bring the reset button on the shields that do not allow access to the button on the board;
-
AREF is the voltage reference for the ADC convertors. You cannot use this pin on the Galileo board.
Intel Galileo Jumper Configuration
Galileo board sports three jumpers which allow you to modify the configurations. The IOREF J1 jumper allows input/output pins to manage both 5V and 3.3V. When the jumper is on 5V, pins are configured with the high level and IOREF pin is set to 5V. Similarly, when the jumper is on 3.3V both pin I/O and IOREF are configured with 3.3V levels in order to make them compatible with shields requiring it. Attention must be paid to the compatibility of the levels to avoid irreparable damages to the Galileo board and/or to the shields. A second jumper J2 allows you to change the I2C address of the expansion pins I/O and of the EEPROM memory, functionality both managed via I2C-bus in slave mode. With the jumper connected to pin 1, the one with the little white triangle, the expansion I/O pins have 0100001 address and the EEPROM memory has 1010001. By changing the position of the jumper address 0100000 is assigned to expansion I/O pins and 1010000 to the EEPROM memory. This feature allows to solve any conflicts of addresses in case you want to use external slave devices using the I2C bus. The third J3 jumper allows you to manage the power of Arduino-compatible shields assembled on the Galileo board. With the jumper plugged in, the shield is supplied with 5V voltage from the voltage regulator inside the board. If the shield must be supplied with a voltage that is greater than 5V is essential to remove the jumper and give to the shield its own power supply. Also in this case attention must paid: forget to remove the jumper and giving power greater than 5V to the shield can bring irreparable damages to Galileo board.
Galileo Activation
To be programmed, Galileo board requires a dedicated IDE available at http://www.intel.com/ support / galileo / index.htm “Download” section. It looks like Arduino’s classic IDE and has the same user interface, the difference is that the boards selectable in the menu are those of the Intel (only Galileo for now). Also the compilation toolchain is different but still completely transparent for the user.
First give power to the Galileo board using the supplied power adapter. Plug the coaxial plug with the dedicated socket on the board. Remember that the first step is to plug power supply, otherwise you can possibly damage the board. Now, the programming can only be done by connecting the USB cable to the PC on which you have installed the programming IDE. Wait a moment before connecting the USB cable to the microUSB client port, near the Ethernet connector.
Some preliminary steps are needed before you can program the board with the first sketch. First download and install the development IDE, then install the USB driver to recognize the board and finally update the board firmware. The last step is needed because our card is in early version with a an obsolete firmware. In any case, the functionality is available in the IDE and must be performed before loading any sketch.
Having downloaded the IDE version suited for you, simply unzip it in a folder to your choice.
Now you can proceed to install the USB driver. Check that you have connected the power supply to Galileo, then connect the USB cable to the PC and the micro USB client socket of Galileo. In Figure you can see the device “Gadget Serial v2.4” highlighted with a yellow sign with a small exclamation mark inside. This means that the installation of the driver wasn’t successful. You can now find “Gadget Serial v2.4” under the expansion menu “Other devices” or “Ports (COM & LPT)”. To update the driver, right click on the “Gadget Serial v2.4” from the dropdown menu and choose “Update Driver Software”. In the dialog box choose “Search driver in pc” and in the next window, with “Browse”, go to the folder:
hardware/arduino/x86/tools
which is located inside your IDE installation. Leave the check mark in the check-box “Include subfolders” and click “Next” to begin the installation of the driver. Confirm all by clicking on the “Close” button. Eventually, returning to the “Device Manager”, under “Ports (COM & LPT) find the COM port assigned to your Galileo board, in our case COM18.
Next time the USB port would change: always check in the IDE and in the “Device Manager” window.
Now open the IDE and make sure that the Galileo board is recognized. From the menu “Tools” >> “Board” select Intel ® Galileo, which actually is the only choice. Then, again from the menu “Tools” >> “Serial port” select the port assigned to the board, in our case COM18. At this point we can program the board with the IDE. The first step is to update the board firmware, as required by the “Getting started” guide. Before this step avoid uploading any sketch. To update the firmware go to the menu “Help” >> “Firmware update”. A message will show up asking to verify that the board is powered through the coaxial connector. Check and click ” Yes “.
A new message shows the firmware version installed on the board and the update version available for substitution. Answer “Yes” and the downloading of the new firmware on the board will start. A further message invites not to power off the board until the end of the process. In few minutes, a new window notifies that the download is finished. Click “OK”. Now try to load the usual test sketch that allows to blink a LED, the LED connected to pin 13 on the board.
Follow the menu chain “File” >> “Examples” >> “01.Basics” >> “Blink”.
Verify, on the Tools menu, that board and serial port are correctly set. Click on the “Upload” button and wait for the compilation and subsequent download of the compiled form on the board. Red messages will advice you that the sketch had been successfully loaded on the board. Look at the LED on the board and you’ll see a green flash per second if everything worked properly.
Conclusions
First of all is worth to mention that we haven’t downloaded the Micro SDCard version of the OS that allows the boot from the SDCard itself and has sports additional features such as drivers for USB WiFi dongles, an SSH server and then the ability to connect to the operating system from the outside, and the OpenCV package for images processing, already installed. For now, our impression is that the Galileo board is the starting point for those who want to experience a cheap and easy way to embedded GNU/Linux in Intel architecture to move later on to higher end systems: in line with Arduino vision.
The board has several expansions suitable for interfacing devices typical of the Intel world. From what we understand the Arduino sketch “runs” in the GNU/Linux as a user process. The disadvantage of this solution is not to have a microcontroller completely dedicated to the elaboration of the sketch. The advantage is that it should be easy to make sketch interact with other processes running on GNU / Linux, as they are on the same “machine”. Since this is a early version is too early to make a definitive statements. We’ll examine the GNU / Linux component of the board in depth and keep you informed about the possibilities of Galileo.