Pine A64+ single-board computer

This comes in a few different models, A64 and A64+ they are all 64-bit with 4 cores but RAM and IO varies.

Early notes

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.

GPIOs

J47 Pi-2 Connector

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

J48 Euler "e" Connector

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_MOSI20 Gnd
21 PD3 G99 UART4_RX SPI1_MISO22 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.

J51 Exp Connector

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.

J49 Wifi+BT Port (14-pin) 2mm pitch

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

J50 Wifi+BT Port (16-pin) 2mm pitch

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

Serial ports

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

I2C

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>

GPIO-numbering

( 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_lowWirevalue
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.

UART0

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)

SignalJ48J51Color
UART_TX297White (USB-RX)
UART_RX308Green (USB-TX)
GND346 or 9Black

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.

Installation notes:

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

Info on compiling kernel

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

2016-06-13

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

2016-08-01

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.

2016-08-22

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?

To Pine 64+ main page


Powered by Apache

Valid XHTML 1.0!