This comes in a few different models, A64 and A64+ they are all 64-bit with 4 cores but RAM and IO varies.
I have pledged on the highest specced version of this, A64+ which is runs at 1.2 GHz with 2 GB RAM.
Some links while I am waiting:
Homepage
Forum
Wiki with some info
The wiki has links and pictures, including pin-outs
of the various connectors: PI-2, Euler, Exp, and Wifi/BT
Looks like there are the following IOs: from the picture at the home page, and just starting at the top left corner and going around:
Label | connector | Purpose |
TP | high-density | Touch-control |
CS1 | high-density | Camera |
PI-2-Bus | 40 pins | GPIOs. |
VBAT | 3 pins | Lithium Battery |
RTC | 2 pins | RTC battery |
USB | 2xUSB-A | apparently the top one allows for gadget-mode |
WIFI/BT | Bluetooth/Wifi card connectors | |
3-pin socket | IR receiver input. | |
Microphone-? | 1/8 in jack | Audio |
SD Card socket | SD-card for boot and OS, max 128 GB | |
Exp | 10 pins | GPIOs.
Visible on picture of card labeled A64-DB-Rev B 2015-12-17.
Not present on some other pictures of R18-A64-DB-V1_0 2015-10-19 Present on the 2016-02-25 cards that I have here. |
Euler Bus | 34 pins | GPIOs. |
DS1 | high-density | LCD-panel Display |
JACN? | Micro usb B | Power in |
LAN | RJ45 | Ethernet |
HDMI | HDMI | HDMI Video out |
For the connector named PI-2-Bus, the naming and form-factor suggests that this is going to be a set of gpio lines very similar to the 40 pins IO on Raspberry Pi devices. In fact, the pinout is as close to this as appeared to be possible -- ground and power pins are all in the same locations, as are the i2c, SPI, and UART functions.
There are several features here that are very similar to what we know from the Raspberry Pi: The power input is the same kind of micro-USB-B; there is a SD-card for the OS from which the device boots. Then there are USB connectors for keyboard and mouse, HDMI for a screen; wired Ethernet, GPIO signals (very likely that these are 3.3V).
It will be interesting to see how good this device works.
If this works as well as the Raspberry Pi does it will be a good alternative for those occasions when more computing power really is required.
The processor is Cortex A53, which turns out is the same as the one the Raspberry Pi 3 has. However, the Pine64+ has twice the RAM and what appears to be a wider Ethernet bandwidth, as it isn't limited by the USB2 channel of the Raspberry Pi. Also, it seems to be that a real 64-bit linux is being made available for the Pine64+ now, so it will be interesting to see how well it performs for the streamng SDR system that I am looking at. Since there is some kind of sound input on-board this might not require any separate sound card either.
2016-03-17: awaiting the two boards to arrive. Downloaded a Linux image (Arch Linux, 20160304, based on user longsleep's work.) This was in a RAR format file, and I found the unrar utility for Debian Non-free, to be able to pull the .img file from within. Now this is ready to go onto an SD card, process the same as for the Raspberry Pi devices.
2016-04-19: Boards have arrived. Pulled down Debian Jessie from the link in the forums. (Great thanks to longsleep and lenny.raposo)
The System shows that sizeof(char *) = 8 and sizeof(size_t) = 8 so we have 64-bit architecture. sizeof(time_t) = 8 also, so there is no year-2038 problem to be expected here! No software support for i2c or spi apparently (yet). There is also limited modules available for serial-port and other usb-connected devices. As of now, the PL2303 in the Adafruit cable does not yet have the driver available. However the ftdi_sio has a driver, and plugging in an FT232RL-based device does work well -- we get the /dev/ttyUSB0 device for this. More on UART0 below.
There is an RTC onboard and the hwclock utility does work. NTP client is also up, so I get the correct time from various chimers right away.
Userland GPIO support also exists however, as we have the /sys/class/gpio directory.
1 3.3V | 2 5.0V |
3 PH3 G227 (E) TWI1_SDA | 4 5.0V |
5 PH2 G226 (E) TWI1_SCL | 6 Gnd |
7 PL10 G362 (E) S_PWM | 8 PB0 G32 (E) UART2_TX |
9 Gnd | 10 PB1 G33 (E) UART2_RX |
11 PC7 G71 | 12 PC8 G72 1w |
13 PH9 G233 (E) | 14 Gnd |
15 PC12 G76 | 16 PC13 G77 |
17 3.3V | 18 PC14 G78 |
19 PC0 G64 SPI0_MOSI | 20 Gnd |
21 PC1 G65 SPI0_MISO | 22 PC15 G79 |
23 PC2 G66 SPI0_CLK | 24 PC3 G67 SPI0_CS |
25 Gnd | 26 PH7 G231 (*E) |
27 PL9 G361 (E) TWI0_SDA | 28 PL8 G360 (E) TWI0_SCK |
29 PH5 G229 (E) | 30 GND |
31 PH6 G230 (E) | 32 PC4 G68 |
33 PC5 G69 | 34 GND |
35 PC9 G73 | 36 PC6 G70 |
37 PC16 G80 | 38 PC10 G74 |
39 Gnd | 40 PC11 G75 |
1 3.3V | 2 DC IN |
3 Lithium Batt+ | 4 DC IN |
5 Temp Sensor | 6 Gnd |
7 PL11 G363 (E) IR_RX | 8 5 V |
9 Gnd | 10 PH8 G232 (E) SPDIF OWA_OUT |
11 PB3 G35 (E) UART2_RTS I2S_MCK | 12 PB4 G36 (E) I2S_SYNC |
13 PB5 G37 (E) I2S_BCK | 14 Gnd |
15 PB6 G38 (E) I2S_DOUT | 16 PB7 G39 (E) I2S_DIN |
17 3.3V | 18 PD4 G100 UART4_RTS |
19 PD2 G98 UART4_TX SPI1_MOSI | 20 Gnd |
21 PD3 G99 UART4_RX SPI1_MISO | 22 PD5 G101 UART4_CTS |
23 PD1 G97 UART3_RX SPI1_SCK | 24 PD0 G96 UART3_TX SPI1_CS |
25 Gnd | 26 PD6 G102 |
27 PB2 G34 (E) UART2_CTS | 28 PD7 G103 |
29 PB8 G40 (E) UART0_TX | 30 PB9 G41 (E) UART0_RX |
31 EAROUTP | 32 EAROUTN |
33 NC | 34 GND |
The unit can be powered via the micro-usb connector, or with 5V applied to pins 2 and 4 on J48, 0V on any or all of the pins 6, 9, 14, 20, 25, 34.
1 3.3V | 2 System LED |
3 Charger LED | 4 Reset Sw |
5 Pwr Stb Sw | 6 Gnd |
7 PB8 G40 (E) UART0_TX | 8 PB9 G41 (E) UART0_RX |
9 Gnd | 10 KeyADC |
The (E) means the gpio-line appears to support edge-triggered interrupts.
1 GND | 2 PG2 SDC1-D0 SDIO-D0 |
3 PG0 SDC1-CK SDIO-CLK | 4 PG3 SDC1-D1 SDIO-D1 |
5 GND | 6 PG4 SDC1-D2 SDIO-D2 |
7 PG1 SDC1-CMD SDIO-CMD | 8 PG5 SDC1-D3 SDIO-D3 |
9 PL2 G354 (E) S-UART-TX WL-REG-ON | 10 X32KFOUT AP-CK32KO |
11 PL3 G355 (E) S-UART-RX WL-WAKE-AP | 12 GND |
13 VCC-WIFI | 14 VCC-WIFI |
1 PG10 AIF3-SYNC PCB1-SYNC BT-PCM-SYNC | 2 PG6 UART1-TX BT-UART-RX |
3 PG11 AIF3-CLK PCB1-BCLK BT-PCM-BCLK | 4 PG7 UART1-RX BT-UART-TX |
5 PG12 AIF3-DOUT PCB1-DOUT BT-PCM-DIN | 6 PG8 UART1-RTS BT-UART-CTS |
7 PG13 AIF3-DIN PCB1-DIN BT-PCM-DOUT | 8 PG9 UART1-CTS BT-UART-RTS |
9 GND | 10 GND |
11 PL5 G357 (E) S-JTAG-CK BT-WAKE-AP | 12 PL4 G356 (E) S-JTAG-MS BT-RST-N |
13 PL6 G358 (E) S-JTAG-DO AP-WAKE-BT | 14 VCC-WIFI-IO |
15 GND | 16 GND |
There are 6 serial ports defined, of which at least 5 can operate with terminals or in any other way that serial ports can be used. Three of the ports have the RTS/CTS handshaking line pair also. UART0 TX and RX appear on both J48 and J51. The serial ports defined are available at the following pins:
UART# /dev/ttyS# | Tx | Rx | RTS | CTS | GND |
0 | J48-29 or J51-7 | J48-30 or J51-8 | J51-6 | ||
1 | J50-2 | J50-4 | J50-6 | J50-8 | J50-10 |
2 | J47-8 | J47-10 | J48-11 | J48-27 | J47-6 |
3 | J48-24 | J48-23 | J48-25 | ||
4 | J48-19 | J48-21 | J48-18 | J48-22 | J48-20 |
Adafruit USB cable | White | Green | Black | ||
DE9M pin # | 3 | 2 | 7 | 8 | 5 |
The signal levels on these are 3.3V so the connections to a standard DE9 plug shown will have to be made via level translators in an ST3232 or similar that converts from RS-232 Mark and Space to 3.3V-system H and L.
Note that UART1 (/dev/ttyS1) is used for the Bluetooth subsystem so it will not be directly available if the wireless card is being used.
There is a getty going on ttyS0 (UART0) and in order to start these on other serial ports, use something like what is shown here for ttyS2 here:
systemctl enable serial-getty@ttyS2.service systemctl start serial-getty@ttyS2.service
Similarly, in order to remove the getty the equivalent commands are:
systemctl stop serial-getty@ttyS2.service systemctl disable serial-getty@ttyS2.service
To enable i2c, use:
apt-get install i2c-tools libi2c-dev
i2cdetect -y 1 generates messages in the system log for all the unconnected addresses,
sunxi_i2c_do_xfer()902 - [i2c1] incomplete xfer (status: 0x20, dev addr 0x77)
and it produces a different message
twi_start()370 - [i2c1] START can't sendout!
when there is nothing connected to the TWI1 pins (J47-3 and J47-5).
i2cdetect -y 0 generates similar messages:
twi_start()370 - [i2c0] START can't sendout!
whether or not anything is connected to pins J47-27 and J47-28 or not.
The TWI1 / i2c-1 buss on J47-3 and J47-5 does not appear to have pull-up resistors, unlike the Raspberry Pi. I have also not got the TWI0 / i2c-0 buss on J47-27 and J47-28 to do anything yet.
There is the GUI, and I can now see things on a VGA screen connected via an HDMI-VGA adapter. This version of the OS has i2c enabled and available and plugging a card with an "ASE4" chip onto the Rpi2 connector (it has connections to the 6 first pins, that are power, ground, and i2c) showed this appeared at address 0x0f with i2cdetect -y 1.
Programs for communicating with devices here worked right away, using the i2c_smbus_ series of functions declared in #include<linux/i2c-dev.h>
( found info here in the forum.pine64.org )
There are several banks of gpios, identified with letters, so A=0, B=1, C=2 etc. Multiply this letter-code by 32 and add the number following as per:
/* Convert the hardware spec strings such as PC7 into equivalent GPIOnnn names. Returns the calculated gpio number. */ int convertgpioname(char *gname, /* String with PC15 or similar string in it */ char *gpiofile, /* Name of the GPIOnnn file */ size_t gpiofilemax) /* Available length of this */ { int gpiono; char gpiofile[40]; gpiono = (gname[1] - 'A') * 32 + strtol(gname+2, NULL, 10); snprintf(gpiofile, gpiofilemax, "gpio%u", gpiono); return(gpiono); }
Thus, for example, Pi-2 connector pin 11, named PC7, has C=2, times 32 is 64, then add the 7, for a total of 71, so this is identified as GPIO71.
Write 71 to /sys/class/gpio/export. The system makes the /sys/class/gpio/gpio71/ directory for us with the usual contents.
We now have /sys/class/gpio/gpio71/direction to be set to "in" or "out" -- even if it starts out saying "in" it doesn't read inputs until written. Then "value" will contain 0 for L and 1 for H or vice versa according to the setting of "active_low"
active_low | Wire | value |
0 | L | 0 |
0 | H | 1 |
1 | L | 1 |
1 | H | 0 |
We notice that there is no "edge" for gpio71 -- it doesn't support interrupts. Another higher-numbered one, PH9, or GPIO233, does support them, so we have to do some discovery on this.
The GPIOS that have this "edge" are the ones in the PB, PH and PL series: PB0 thru PB9, 32-41, PH2-226, PH3-227, PH5 thru PH9, 229-233, PL8 thru PL11, 360-363, PL2 thru PL6, 354-358 (not tested)
Also, pin Pi-2/26, PH7, was being used for something in earlier kernels -- trying to export GPIO231 (231 = 7 + 7*32) returns "device busy".
This pin is free on the more recent Debian Mate system (3.10.101), and it also has the "edge" file, as noted above and in the pinout-table.
This is how to connect the Adafruit USB-Serial cable to pins 29, 30, and 34 on the J48 Euler connector or pins 7, 8, 6/9 on the J51 expansion connector: (TX, RX seen from the point of view of the Pine A64)
Signal | J48 | J51 | Color |
UART_TX | 29 | 7 | White (USB-RX) |
UART_RX | 30 | 8 | Green (USB-TX) |
GND | 34 | 6 or 9 | Black |
But there is a getty running on the UART0 at 115200, so I can log-in there if desired. Since the HDMI doesn't work this might be useful. I'm pretty sure that the details around i2c busses and such will be worked out in time. Apparently this has only been available for a couple weeks, and that in itself is actually quite impressive.
Interesting info about temperatures and such can be found in places like: /sys/devices/virtual/thermal/thermal_zone0/temp or even /sys/devices/platform/axp81x_board/axp-regulator.41/regulator/regulator.2/microvolts. There is a shell-script in /usr/local/sbin for reading things, sudo /usr/local/sbin/pine64_health.sh. The sudo part is needed for the processor-info.
sudo password is the same as for login (password). Once having been able to log-in as pine64user, or debian, next is to update and get things going.
This is also useful in order to upgrade the system to the latest and greatest later on.
sudo apt-get install -f pine64_update_uboot.sh pine64_update_kernel.sh resize_rootfs.sh reboot
Then after reboot, get some various necessary items in (such as the vim editor!):
apt-get update apt-get upgrade apt-get install vim
One or more of general Documentation, manual pages, and kernel-dev is also nice to have
apt-get install manpages manpages-dev linux-manual-3.16 apt-get install glibc-doc glibc-doc-reference
For sound, a bug-fix said to get rid of the pulseaudio and put regular alsa in there instead. But there is no pulseaudio to be removed, so I just tried the rest of the recipe:
apt-get install alsa-base alsa-tools alsa-tools-gui alsa-utils alsa-oss alsamixergui libalsaplayer0 apt-get install libasound2-dev
May set EDITOR=vi and use visudo to edit and add
pine64user ALL=(ALL) NOPASSWD: ALL
apt-get install bc curl gcc git libncurses5-dev make u-boot-tools git clone --depth 1 --single-branch -b pine64-hacks-1.2 https://github.com/longsleep/linux-pine64
Revisiting: Downloaded first the Debian LXDE system on an 8 GB card that was no go. Boot, but showed problems with reading the card, so not all cards work equally well. Card writes and reads oke on another machine, could be timing problems with that. I might try this on another card, replacing the use of the first card loaded with the older kernel, described above.
Debian Mate however, on another, 32GB, card, worked.
After running resize_rootfs.sh it uses about 3 GB of the total 30 GB available.
(*E): GPIO231 is also now found to be available, and this is edge-triggered.
It turns out, the MAC address is set in the distro and not in the hardware. Running more than one of the same on a network thus won't work unless the MAC address is changed. This is defined in the file /boot/uEnv.txt where there is a line something like
ethaddr=36:c9:e3:f1:b8:05
I edited this to have last octet 07 instead for the second unit -- now both will co-operate on the network. Similarly, the hostname can be changed by editing it in /etc/hosts and in /etc/hostname
In order to upgrade the system to the latest and greatest later on, similar commands as were used initially are done, after having put the following into /etc/apt/sources.list:
deb http://ftp.us.debian.org/debian jessie main contrib non-free deb-src http://ftp.us.debian.org/debian jessie main contrib non-free deb http://security.debian.org/ jessie/updates main contrib non-free deb-src http://security.debian.org/ jessie/updates main contrib non-free deb http://ftp.us.debian.org/debian jessie-updates main contrib non-free deb-src http://ftp.us.debian.org/debian jessie-updates main contrib non-free deb http://httpredir.debian.org/debian jessie-backports main contrib non-free
pine64_update_uboot.sh pine64_update_kernel.sh reboot apt-get update apt-get upgrade apt-get dist-upgrade
I got the OpenWebRx SDR system to work fine on one of the PineA64+ that I have here. I have now put out an order for 5 more of these, as they seem very promising, also with the latest improvements to the kernels that have appeared on the forum.
Operating temperature: -20 to +70 C
Voltages and currents on IO-lines:
Vi max = 3.6V Vio 3.3V - PB PC PF PH 2.5V - PD PE 1.8V - PG PL Voh = Vio-0.2V to Vio Vol = 0V to 0.2V Input Threshholds Vih 0.7*VIO to VIO+0.3 V Vil 0.3*VIO to -0.3 V Ioz = Iih = Iil = 10 microA max Pull-up and pull-down resistances, 100 K Io max = 40 mA (absolute max rating)
Ioh = and Iol = are not specified, there is the Io max of 40 mA, but what is the current drawn (to GND or Vio) before the output voltage moves out of the Voh or Vol spec?