RPI
Raspberry Pi3
Links
- AAA
 
On-board hardware
- AAA
 
Serial console
there is no useful serial console
Benchmarks
[root@armdaq05 ~]# uname -a Linux armdaq05.triumf.ca 4.4.21-v7+ #911 SMP Thu Sep 15 14:22:38 BST 2016 armv7l armv7l armv7l GNU/Linux [root@armdaq05 ~]# cat /proc/cpuinfo processor : 0 model name : ARMv7 Processor rev 4 (v7l) BogoMIPS : 38.40 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xd03 CPU revision : 4 processor : 1 model name : ARMv7 Processor rev 4 (v7l) BogoMIPS : 38.40 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xd03 CPU revision : 4 processor : 2 model name : ARMv7 Processor rev 4 (v7l) BogoMIPS : 38.40 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xd03 CPU revision : 4 processor : 3 model name : ARMv7 Processor rev 4 (v7l) BogoMIPS : 38.40 Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae evtstrm crc32 CPU implementer : 0x41 CPU architecture: 7 CPU variant : 0x0 CPU part : 0xd03 CPU revision : 4 Hardware : BCM2709 Revision : a22082 Serial : 00000000852ec765 [root@armdaq05 ~]#
[root@armdaq05 ~]# ./memcpy_arm memcpy 1 KiBytes: 710 MB/sec memcpy 2 KiBytes: 1037 MB/sec memcpy 4 KiBytes: 1340 MB/sec memcpy 8 KiBytes: 1572 MB/sec memcpy 16 KiBytes: 1703 MB/sec memcpy 32 KiBytes: 2010 MB/sec memcpy 64 KiBytes: 1780 MB/sec memcpy 128 KiBytes: 1808 MB/sec memcpy 256 KiBytes: 1421 MB/sec memcpy 512 KiBytes: 971 MB/sec memcpy 1024 KiBytes: 862 MB/sec memcpy 2048 KiBytes: 824 MB/sec memcpy 4096 KiBytes: 862 MB/sec memcpy 8192 KiBytes: 817 MB/sec memcpy 16384 KiBytes: 797 MB/sec memcpy 32768 KiBytes: 767 MB/sec memcpy 65536 KiBytes: 765 MB/sec memcpy 131072 KiBytes: 766 MB/sec [root@armdaq05 ~]#
Original boot files with the CentOS 7.1 userland
[root@armdaq05 ~]# blkid
/dev/mmcblk0p1: SEC_TYPE="msdos" LABEL="boot" UUID="70F7-FA1D" TYPE="vfat" 
/dev/mmcblk0p2: LABEL="el7" UUID="0ca625c5-8db1-4f78-a9fd-e6cce04f399e" TYPE="ext4" 
/dev/mmcblk0: PTTYPE="dos" 
[root@armdaq05 ~]# 
[root@armdaq05 ~]# fdisk -l
Disk /dev/mmcblk0: 31.4 GB, 31439454208 bytes, 61405184 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x5a7089a1
        Device Boot      Start         End      Blocks   Id  System
/dev/mmcblk0p1            8192      137215       64512    c  W95 FAT32 (LBA)
/dev/mmcblk0p2          137216     2713599     1288192   83  Linux
[root@armdaq05 ~]# 
[root@armdaq05 ~]# df -kl
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/root        1235136 1029272    125072  90% /
devtmpfs          469536       0    469536   0% /dev
tmpfs             473868       0    473868   0% /dev/shm
tmpfs             473868   29964    443904   7% /run
tmpfs             473868       0    473868   0% /sys/fs/cgroup
tmpfs              94776       0     94776   0% /run/user/0
/dev/mmcblk0p1     64456   21192     43264  33% /mnt/tmp
[root@armdaq05 ~]# 
Install Boot files
Original boot files are in /daq/daqshare/olchansk/RPI3/bootfs
- use 32GB micro-SD flash
 - connect to USB-to-SD flash adapter, plug into linux computer
 - login as root
 - identify the /dev/sdXXX device corresponding to target media: use "fdisk -l", look for a 32GB disk with a single MS-DOS partition
 - ensure the partitions of /dev/sdXXX are not mounted, use "df -kl" and umount /dev/sdXXX1, etc.
 - run "fdisk /dev/sdXXX"
 - create MSDOS partition table: command "o"
 - create first partition 64Mbytes: command "n", primary "p", first sector "<enter>", last sector: "+64M"
 - set partition type "C": command "t", partition 1 is selected automatically, hex code "c"
 - mark bootable: command "a", partition 1 is selected automatically
 - confirm correct layout: command "p"
 
Disk /dev/sde: 31.1 GB, 31104958464 bytes, 60751872 sectors Device Boot Start End Blocks Id System /dev/sde1 * 2048 133119 65536 c W95 FAT32 (LBA)
- save new partition table: command "w", there should be no messages other than "syncing disks"
 - mkfs.msdos /dev/sdXXX1
 - mkdir -p /mnt/tmp
 - mount /dev/sdXXX1 /mnt/tmp, cd /mnt/tmp
 - rsync -av /daq/daqshare/olchansk/RPI3/bootfs/ .
 - sync
 - select boot method:
- cp cmdline-mmcblk.txt cmdline.txt ### to boot from SD flash
 - cp cmdline-nfsroot.txt cmdline.txt ### to boot from network (dhcp and nfsroot)
 
 - sync
 - cd /; umount /mnt/tmp
 - eject /dev/sdXXX
 - try to boot from the SD flash - on HDMI video, should see Linux kernel boot all the way to a panic on failure to mount rootfs.
 
Install CentOS7 rootfs image
- use bootable 32GB micro-SD flash
 - connect and identify /dev/sdXXX same as above
 - ensure all partitions are unmounted, same as above
 - create second partion of maximum size:
 - fdisk /dev/sdXXX
 - command "n", "p", enter, enter
 - command "p" to see the layout:
 
Disk /dev/sde: 31.1 GB, 31104958464 bytes, 60751872 sectors Device Boot Start End Blocks Id System /dev/sde1 * 2048 133119 65536 c W95 FAT32 (LBA) /dev/sde2 133120 60751871 30309376 83 Linux
- command "w" to save the changes
 - if it complains about "Device or resource busy":
- eject /dev/sdXXX
 - remove it from usb adapter
 - connect to usb adapter and identify device again, same as above
 
 - ls -l /dev/sdXXX* to see there are two partitions "1" and "2"
 - mkfs.ext4 /dev/sdXXX2
 - mkdir -p /mnt/tmp
 - mount /dev/sdXXX2 /mnt/tmp, cd /mnt/tmp
 - rsync -av /ladd/data0/backup.os/armdaq06/ .
 - e2label /dev/sdXXX2 el7
 - sync
 - cd /; umount /mnt/tmp
 - eject /dev/sdXXX
 - try to boot, should boot all the way to the login prompt.
 
Setup Python i2c tools
su - root yum install python-setuptools.noarch yum install python-cffi yum install python-devel cd git git clone https://github.com/bivab/smbus-cffi.git cd smbus-cffi python setup.py install
Enable i2c drivers
(already done) edit boot config.txt, uncomment "dtparam=i2c_arm=on" and "dtparam=i2c1=on", reboot echo modprobe i2c-dev >> /etc/rc.local echo modprobe i2c_bcm2708 >> /etc/rc.local ls -l /dev/i2c* i2cdetect -l i2cdetect 1 echo chmod a+wr /dev/i2c* >> /etc/rc.local reboot, run i2cdetect again.
Script for creating boot files
~olchansk/git/scripts/clone/boot_rpi3.perl
Raspbian OS
Recommended RaspberryPi OS is "Raspbian". Current version is:
Raspbian Buster Lite Version:February 2020 Release date:2020-02-13 Kernel version:4.19 Size:434 MB
Identification and important packages:
root@raspberrypi:~# uname -a Linux raspberrypi 4.19.97-v7+ #1294 SMP Thu Jan 30 13:15:58 GMT 2020 armv7l GNU/Linux root@raspberrypi:~# gcc -v gcc version 8.3.0 (Raspbian 8.3.0-6+rpi1) root@raspberrypi:~# python --version Python 2.7.16 root@raspberrypi:~# python3 --version Python 3.7.3 root@raspberrypi:~# cmake --version cmake version 3.13.4
- download here https://www.raspberrypi.org/downloads/raspbian/
 - unzip, dd to a 32GB SDflash card
 - insert card into RPi3, power up, it will boot into login prompt
 - default user: pi, password: raspbian, login change default password, install ssh keys for user pi and user root.
 - change default keyboard layout from UK (with the pound key): vi /etc/default/keyboard, set XKBLAYOUT="us"
 - change default locale from UK to "C" (en_US.UTF8 does not seem to be available): vi /etc/default/locale, set LANG=C.UTF-8
 - enable ssh server: apt-get install openssh-server, systemctl enable sshd.service, systemctl start sshd.service
 - reboot: shutdown -r now
 - RJ45 ethernet network will autoconfigure by DHCP, ssh pi@... and root@... should work
 - login as root, install missing packages:
- apt-get update
 - apt-get install git emacs xemacs21 cmake
 
 
Create custom images
The official tool used raspberrypi.org is available here: https://github.com/RPi-Distro/pi-gen
It is working out of the box with Debian bullseye. The tool is built around debootstrap, all packages are pulled from http://archive.raspbian.org/ (not the official debian repos!).
The user has to provide a config file named "config" in the root directory. A example is provided below:
IMG_NAME=MVM_GUI_TRIUMF RELEASE=buster DEPLOY_ZIP=0 USE_QEMU=0 LOCALE_DEFAULT=en_CA.UTF-8 TARGET_HOSTNAME=mvm_gui KEYBOARD_KEYMAP=ca KEYBOARD_LAYOUT="English (US)" TIMEZONE_DEFAULT="America/Vancouver" FIRST_USER_NAME="mvm" FIRST_USER_PASS="gui" ENABLE_SSH=0 STAGE_LIST="stage1 stage2 stage3 stage4"
To build the image, simply run ./build.sh and wait.
GPIO
- apt-get install wiringpi
 - gpio readall
 - gpio mode 24 output
 - gpio write 24 1
 - gpio write 24 0
 
SPI
- if there is no /dev/spidev0.0 and /dev/spidev0.1, edit /boot/config.txt, uncomment dtparam=spi=on, reboot
 - CS pins are:
- CE0 is J8 pin 24 (GPIO8) is /dev/spidev0,0
 - CE1 is J8 pin 26 (GPIO7) is /dev/spidev0,1
 
 
I2C
- if there is no /dev/i2c*, edit /boot/config.txt, uncomment "dtparam=i2c_arm=on", reboot
 - apt-get install python-smbus i2c-tools
 - i2cdetect -y 1 ### found device at address 0x70:
 
0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: 70 -- -- -- -- -- -- --
WiFi and Bluetooth
The WiFi and Bluetooth interfaces can be disabled in the boot/config.txt. As a side effect, the PL011 UART is re-routed to the GPIOs 14 and 15. By default, the UART is used by the BT modem.
Note: there is a second "MiniUART" aviabale on the Rpi, but its fonctionally are very limited. See https://www.raspberrypi.org/documentation/configuration/uart.md
# Disables the Bluetooth device (also restores UART0/ttyAMA0 to GPIOs 14 and 15). dtoverlay=disable-bt dtoverlay=disable-wifi
RS232
The Rpi3 has two serial interfaces (https://www.raspberrypi.org/documentation/configuration/uart.md). Levels are *3.3V*.