Friday, July 13, 2018

Backup Camera

A backup camera with an LCD monitor can be purchased for about 30 USD.  Some camera by itself is sold for less than 4 USD.  The camera can be mounted at the rear license plate.  The camera runs on 12V and outputs NTSC analog video signal.  Nearly identical systems are marketed under various brand names.  The specs are similar: 648x488 pixels, 420 TV lines camera; 4.3" 480 x 272 LCD monitor.  The camera also comes with IR LEDs and light sensor.  The system draws about 200mA at 12V and 230mA with LEDs on.  The LCD monitor can take two video inputs; one of inputs takes priority.  A DPDT switch can be used to toggle between the inputs.

The video quality is actually surprisingly good.  The image sensor is claimed to be PC7070, but it is hard to find a data sheet.  The best guess is that the sensor comes from Korea's PixelPlus, but there is not exact part listed.   It could be similar to PC7080S: 648x488, 5.6um pixel, 1/4 inch optical format, power consumption 82mA/3.3V.  OmniVision produces OV7950, which also has similar functionalities and a more detailed datasheet is available: 656x492, 6um pixel, 1/4 inch optical format.

The camera draws 78mA/12V, with LED 124mA.  It can work down to 6V (5.6V with reduced video quality).    The current draw is constant up to 14V (upper rated voltage).  The LEDs only turn on when the voltage is greater than 10V, and draw more current as the voltage goes up (161mA/14V).  The lens FOV is not advertised 135 degrees, but only 75 degree horizontal (94 degree diagonal).

The LCD display draws 23mA/12V when there is no video input and 122mA/12V when displaying video.  The power seems switching regulated 104mA/14V, 166mA/9V and works down to about 6V (273mA).

The power input seems reverse polarity protected.

Although the world has gone digital, it is still appealing to run the analog video.  It just works without complicated settings or software.

I opened up the back up camera that I bought on eBay for $3.72.  The image quality is little poorer than the other one.   The 4 LEDs are white light.  After removing what appeared to be silicone gel and exposing the circuit board, I could see the imaging sensor and an EEPROM 24C08A, which is an I2C serial memory chip with 1Kx8 bits.  It does not appear enough memory to supply the overlay image.  So the OSD distance guideline displayed with the video is probably generated internally.  I would like to remove the OSD and flip the image so it can be used as a front view camera.

The EEPROM has the three address lines grounded, so the 7-bit address is 0x50.  The WP pin is  also grounded allowing read and write.  The I2C signals are pulled up to 3.3V with 4.7K.  I started by shorting pin 4 (SDA) and pin 5 (GND) of the EEPROM.    That probably forced the imager into the default state, but the default state enables the OSD with guidelines and a few extra numbers and letters and the exposure control seems a little different.  So I'll have to get dump of the memory and make mods.
I also came across a preliminary PC7070K datasheet, dated Oct. 2013.  It describes the wire-strapping function: the state of the I/O pins determines the chip mode.   The circuit board clearly has a few pull-up and pull-down resistors and un-populated footprints.   It only took a few guesses to find the pads to turn off guidelines and disable image mirroring.   Now it can be used for front view camera.   The focus is a little close (as it is intended as a backup camera).    The focus adjustment is fixed with epoxy, so it would take a little effort to make adjustment.

Friday, June 22, 2018

PX4 on STM32F4Discovery

We'll try to run the PX4 firmware on the STM32F4Discovery board.  Some documentation can be found here.   We'll try to run everything from Linux.

First, we build the PX4 bootloader for f4discovery.  There is a specific makefile target, make px4discovery_bl.  To flash the bootloader, we can use texane stlink, which we will build.  After installing it, we can run stlink-gui and download the bootloader through the mini USB port, detected as STMicroelectronics ST-LINK/V2.

Then we build the PX4 firmware with make px4-stm32f4discovery_default.  We connect to the micro USB port; it is detected as PX4 BL DISCOVERY and /dev/ttyACM0 port is created.  To flash, make px4-stm32f4discovery_default upload.

Connect a USB Serial adapter to PA3 (RX) and PA2 (TX), and run screen /dev/ttyUSB0 57600 to access NuttX terminal.  The boot message, 

sercon: Registering CDC/ACM serial driver
sercon: Successfully registered the CDC/ACM serial driver
HW arch: PX4_STM32F4DISCOVERY
FW git-hash: 7a82c777b28c49b3476be3da716984e6bdc987a9
FW version: 7.82.77 0 (122834176)
OS: NuttX
OS version: Release 7.22.0 (118882559)
OS git-hash: 63775322bf25adb406594f8e610122fe0cef2f7a
Build datetime: Jun 22 2018 22:25:57
Build uri: BUILD_URI
Toolchain: GNU GCC, 4.9.3 20150529 (prerelease)
MFGUID: 3138343532314719002e0034
MCU: STM32F???, rev. Z
UID: 2E0034:32314719:31383435
nsh: mount: mount failed: No such file or directory
nsh: tone_alarm: command not found
nsh: mkfatfs: mkfatfs failed: No such file or directory
nsh: tone_alarm: command not found
nsh: tune_control: command not found
nsh: mtd: command not found
INFO  [param] selected parameter default file /fs/microsd/params
ERROR [param] open '/fs/microsd/params' failed (2)
nsh: rgbled: command not found
nsh: blinkm: command not found
nsh: rgbled_pwm: command not found
  BAT_N_CELLS: curr: 0 -> new: 3
ERROR [param] Parameter SYS_USE_IO not found
ERROR [param] Parameter SYS_FMU_TASK not found
ERROR [param] Parameter MNT_MODE_IN not found
ERROR [param] Parameter MNT_MODE_OUT not found
nsh: dataman: command not found
nsh: gps: command not found
nsh: fmu: command not found
nsh: fmu: command not found
nsh: ms5611: command not found
nsh: ms5611: command not found
nsh: bst: command not found
nsh: adc: command not found
ERROR [param] Parameter SENS_EN_LL40LS not found
ERROR [param] Parameter SENS_EN_LL40LS not found
ERROR [param] Parameter SENS_EN_SF0X not found
ERROR [param] Parameter SENS_EN_SF1XX not found
ERROR [param] Parameter SENS_EN_MB12XX not found
ERROR [param] Parameter SENS_EN_TRANGER not found
ERROR [param] Parameter SENS_EN_TFMINI not found
ERROR [param] Parameter SENS_EN_LEDDAR1 not found
nsh: sensors: command not found
nsh: commander: command not found
nsh: send_event: command not found
nsh: load_mon: command not found
ERROR [param] Parameter UAVCAN_ENABLE not found
ERROR [param] Parameter SENS_EN_LL40LS not found
ERROR [param] Parameter TRIG_MODE not found
nsh: fmu: command not found
nsh: tune_control: command not found
nsh: mavlink: command not found
nsh: mavlink: command not found
ERROR [param] Parameter UAVCAN_ENABLE not found
nsh: mavlink: command not found
nsh: navigator: command not found
No autostart ID found
nsh: ekf2: command not found
nsh: tone_alarm: command not found
ERROR [param] Parameter MNT_MODE_IN not found
nsh: vmount: command not found
ERROR [param] Parameter SDLOG_MODE not found
ERROR [param] Parameter SDLOG_MODE not found
nsh: logger: command not found
nsh: mavlink: command not found

NuttShell (NSH)
nsh> ERROR [parameters] failed to open param file: /fs/microsd/params
ERROR [parameters] param save failed (-1)

nsh> help
help usage:  help [-v] [<cmd>]

  [           dirname     free        mkrd        rmdir       umount
  ?           date        help        mh          set         unset
  basename    dd          hexdump     mount       sh          usleep
  break       df          kill        mv          sleep       xd
  cat         echo        ls          mw          test
  cd          exec        mb          ps          time
  cp          exit        mkdir       pwd         true
  cmp         false       mkfatfs     rm          uname

Builtin Apps:
  cu
  bl_update
  config
  mixer
  nshterm
  param
  perf
  px4_simple_app
  reboot
  top
  uorb
  ver
  sercon
  serdis
nsh> ver all
HW arch: PX4_STM32F4DISCOVERY
FW git-hash: 7a82c777b28c49b3476be3da716984e6bdc987a9
FW version: 7.82.77 0 (122834176)
OS: NuttX
OS version: Release 7.22.0 (118882559)
OS git-hash: 63775322bf25adb406594f8e610122fe0cef2f7a
Build datetime: Jun 22 2018 22:25:57
Build uri: BUILD_URI
Toolchain: GNU GCC, 4.9.3 20150529 (prerelease)
MFGUID: 3138343532314719002e0034
MCU: STM32F???, rev. Z
UID: 2E0034:32314719:31383435
nsh>

Monday, June 11, 2018

Fan Speed Measurement

I have an application that requires the fan speed measurement.  We can use some photo detector and a light source between the fan blades as an encoder.

The CdS photoresistor cell does not have the speed.  A solar cell salvaged from a broken timer does respond adequately.

The solar cell is enclosed in a box with a small hole exposing the solar cell.  A LED flashlight is pointed at the solar cell through the hole.  The fan blades interrupts the light periodically.  The voltage generated by the solar cell is digitized and the variations are detected and measured to determine the rate.  The fan has 10 blades, at 1000RPM, the pulse rate is about 170Hz.  The scope captures the signal,

If we use a laser point, which has a small beam spot, we get,

Note the rising edge is faster, but the falling edge still has the long tail. 


Tuesday, February 6, 2018

ESP32-PICO-D4

ESP32-PICO-D4 is a SIP (System-In-Package) module; it is measured about 7 x 7 x 1 mm and looks like a regular IC chip in a 40-pin QFN package.  But it is actually packaged with ESP32, 4MB SPI Flash, 40MHz crystal, and passives.  A picture of the inside shows that the Flash memory die is stacked on the top of the ESP32 die.  Stacked die packaging has become a standard technique for miniaturization (5 dies can be stacked in 1.4mm package).
ESP32-PICO-KIT
The ESP32-PICO-KIT adds a USB to UART converter, 3.3V voltage regulator and a 2.4GHz antenna.  There are also two buttons for EN and BOOT(IO0); these two pins are also controlled by DTR and RTS respectively, so the Flash programming tool can force the device into the programming mode automatically.

Arduino can be used for development, same as the ESP-WROOM-32 module, using the board "ESP32 Dev Module", or adding a custom board definition to the board file.  The programmer toggles EN and BOOT to enter the Flash programming mode.  For pin assignments, see pins_arduino.h for the specific board.  In particular,
 TX = 1;
 RX = 3;
 SDA = 21;
 SCL = 22;
 SS = 5;
 MOSI = 23;
 MISO = 19;
 SCK = 18;
 DAC1 = 25;
 DAC2 = 26;
The two rows of header pins are documented here and here.

Sunday, December 31, 2017

ESP32

Expressif comes out with ESP32, a more powerful successor to the popular ESP8266.  The ESP-WROOM-32 module can be purchased for under $5.   It is a 25.5 x18 x 3.1 mm PCB with printed antenna, and 38 castellation pins with 1.27mm (0.05") pitch.  A very nice pinouts diagram can be found here.


The ESP32-D0WDQ6 supports 802.11n WiFi (2.4GHz) and Bluetooth v4.2.  It contains dual Xtensa 32-bit LX6 cores (240MHz), 448KB ROM and 520KB SRAM.  ESP-WROOM-32 has 4MB QSPI Flash.  ESP32 can address up to 16MB external Flash.   Parts of the internal SRAM (32KB for each core) serve as the cache for the slow SPI Flash.

There is also a development board which adds a 3.3V regulator and CP2102 USB to serial bridge chip.   It has the more convenient 0.1" pitch pins.  Or we can wire up like this,



Using Arduino is probably a good way to start.  The support for esp32 is not included in Arduino by default; it can be installed following the instructions here .

IO0 has to be pulled low to enter the serial bootloader mode.  esptool.py uses RTS for EN and DTR for IO0.  For the ESP32 development board, CP2102 USB to serial bridge chip handles entering the bootloader mode.  Here it is done manually.  The connections are as follows,
  • GND - GND
  • 3V3 - 3.3V
  • TXD0 - RX
  • RXD0 - TX
  • EN - Pull up 
  • IO0 - Pull down
When EN is float, the current draw is about 5mA.  If EN is low, the current draw is 0mA.  When IO0 is pulled low, the current draw is about 17mA.

We test with the example code WiFiScan, which compiles without a problem.
Sketch uses 480294 bytes (36%) of program storage space. Maximum is 1310720 bytes.

Global variables use 36800 bytes (12%) of dynamic memory, leaving 258112 bytes for local variables. Maximum is 294912 bytes.
sptool.py v2.1
Connecting........
Chip is ESP32D0WDQ6 (revision 1)
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 921600
Changed.
Configuring flash size...
Auto-detected Flash size: 4MB
Compressed 8192 bytes to 47...

Writing at 0x0000e000... (100 %)
Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.0 seconds (effective 13109.4 kbit/s)...
Hash of data verified.
Compressed 14128 bytes to 9213...

Writing at 0x00001000... (100 %)
Wrote 14128 bytes (9213 compressed) at 0x00001000 in 0.1 seconds (effective 983.4 kbit/s)...
Hash of data verified.
Compressed 481440 bytes to 299651...

Writing at 0x00010000... (5 %)
Writing at 0x00014000... (10 %)
Writing at 0x00018000... (15 %)
Writing at 0x0001c000... (21 %)
Writing at 0x00020000... (26 %)
Writing at 0x00024000... (31 %)
Writing at 0x00028000... (36 %)
Writing at 0x0002c000... (42 %)
Writing at 0x00030000... (47 %)
Writing at 0x00034000... (52 %)
Writing at 0x00038000... (57 %)
Writing at 0x0003c000... (63 %)
Writing at 0x00040000... (68 %)
Writing at 0x00044000... (73 %)
Writing at 0x00048000... (78 %)
Writing at 0x0004c000... (84 %)
Writing at 0x00050000... (89 %)
Writing at 0x00054000... (94 %)
Writing at 0x00058000... (100 %)
Wrote 481440 bytes (299651 compressed) at 0x00010000 in 3.9 seconds (effective 976.6 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 122...

Writing at 0x00008000... (100 %)
Wrote 3072 bytes (122 compressed) at 0x00008000 in 0.0 seconds (effective 6060.6 kbit/s)...
Hash of data verified.

Leaving...
Hard resetting...
Not sure how the max memory sizes come about.   The program works.  The current draw is about 110mA@3.3V.
ets Jun 8 2016 00:22:57
rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
flash read err, 1000
ets_main.c 371
ets Jun 8 2016 00:22:57

rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:1
load:0x3fff0018,len:4
load:0x3fff001c,len:956
load:0x40078000,len:0
load:0x40078000,len:13076
entry 0x40078ad0
Setup done
scan start
scan done
10 networks found
1: ...

As the ESP chips gain popularity, many online resources are available,
The data sheet and the reference manual are still missing lots of information.  For instance, there is no performance data on the ADC and DAC.

Friday, December 22, 2017

LCD Pixels

Some pictures of LCD pixel structures.


  • 1.8" TFT LCD 128 x 160


  • Samsung TV 32" 1920 x 1080
  • Sony 4K TV 49"
  • Monitor 
  • Monitor 21" 1920 x 1080 
  • Laptop 15" 1920 x 1080 
  • Pad 7" 1920 x 1200 (323 ppi or 80um/pix)

Friday, December 15, 2017

1.8" 128 x 160 TFT LCD

An 1.8" 128 x 160 TFT LCD can be purchased for around $3.  The one that I got has the marking of "KMR-1.8 SPI".  It claims to be ST7735R based.  ST7735R is a 262K 18-bit color TFT controller/driver by Sitronix.   ST7735R is a chip with large aspect ratio (10 x 0.7 mm); it has 759 pads (including 396 source and 162 gate driver output pins) and supports a number of interfaces, parallel and serial.
The one IC on the back appears to be a voltage regulator.  Based on the top marking "65Z5", it is at least similar to Torex XC6206, which regulates to 3V/250mA from max input of 6V.  There is an un-populated jumper between input and output.  I suppose it is used to bypass the regulator.  The soldering job is not great; I had to clean up a little.

The backlight LED takes 23mA at 3V.

The header pins are
  1. GND
  2. VCC
  3. NC
  4. NC
  5. NC
  6. RESET
  7. A0
  8. SDA
  9. SCL
  10. CS
  11. SCK
  12. MISO
  13. MOSI
  14. SD_CS
  15. LED+
  16. LED-
LED+, SD_CS,  MOSI and SCK have 4.7-Ohm series resistors.  LED- is shorted to GND.  The display is advertised to work with Arduino, but it appears to take only 3V input.

There is some confusion as to how the signals should be connected.  The SPI signals are connected to the SD card socket.  SDA/SCL seem like I2C signals, but according to the ST7735R data sheet, the 4-wire SPI (SPI4W) mode, RESET, CS, D/C, SDA and SCL are used.   A0 is the D/C (data/cmd) pin.  It does not seem to follow I2C protocol.    However, SDA is bidirectional.

The SD card pin out is as follows
  1. SD_CS
  2. MOSI
  3. GND
  4. VDD
  5. SCK
  6. GND
  7. MISO
  8. NC
  9. NC
The SD card VDD supply range is 2.7 to 3.6V.  As far as I tell, the SD SPI is unrelated to the display SPI.

The Adafruit-ST7735 library can be used to test.   It has the option of using software or hardware SPI.   The software option worked, but the hardware option did not work.  The wiring is as follows,
  • CS -D10
  • RST - D8
  • A0 (DC) - D9
  • SCL - D13
  • SDA - D11
  • LED+ - 3v3
  • VCC - 5V
  • GND - GND
I used 1600-Ohm resistors in series for 5V to 3V conversion.  I wonder if that might cause some problem.  The  display input pins do not cause the 5V signal level to drop as I expect with ESD protection diodes.  Could the input be 5V tolerant?  The I/O voltage is specified as 1.65 to 3.7V according to the data sheet and the operating voltage is 2.3 to 4.8V.  5V would be stressing it.  I power the Arduino nano with the USB, so the actual voltage is 4.7V (after the diode).  It is possible that the 3V from the regulator is not actually used by the display, but only for the SD card.

People have reported that the display can also run on Orange Pi.  The device is supported by notro's fbtft, with built-in support for Adafruit 1.8".  The wiring is as follows,
  • LED+ - GPIO18 (12)
  • SCL - SCLK (23)
  • SDA - MOSI (19)
  • CS - CE0 (24)
  • A0 - GPIO24 (18)
  • RST - GPIO25 (22)
  • VCC - 3.3V (1 or 17)
  • GND - GND (6,9,14,20,25,30,34 or 39)
The Orange Pi 40-pin header is compatible with the Raspberry Pi.  If different pins are used for RST  DC, and LED, they have to be specified on the drive parameter gpios.  The numbering refers to GPIO_GENn.  The GPIO18 controls the backlight, but it probably is incapable of sourcing 20-30mA LED drive current.   To load the driver, 
sudo modprobe fbtft_device name=adafruit18
But it did not work; the kernel message is as follows
[ 163.068275] fbtft_device: SPI devices registered:
[ 163.068296] fbtft_device: spidev spi0.0 33000kHz 8 bits mode=0x00
[ 163.068305] fbtft_device: 'fb' Platform devices registered:
[ 163.068374] fbtft_device: Deleting spi0.0
[ 163.068799] fbtft_device: GPIOS used by 'adafruit18':
[ 163.068815] fbtft_device: 'reset' = GPIO25
[ 163.068822] fbtft_device: 'dc' = GPIO24
[ 163.068829] fbtft_device: 'led' = GPIO18
[ 163.068836] fbtft_device: SPI devices registered:
[ 163.068845] fbtft_device: fb_st7735r spi0.0 32000kHz 8 bits mode=0x00
[ 163.075420] fb_st7735r spi0.0: fbtft_request_gpios: gpio_request_one('reset'=25) failed with -22
The problem I think is the GPIO numbering is different from RPi.  GPIO18,24,25 are invalid on OPi.  These pins should be GPIO1,5,6 respectively and have to be specified.
  • LED+ - GPIO1 (12)
  • SCL - SCLK (23)
  • SDA - MOSI (19)
  • CS - CE0 (24)
  • A0 (DC) - GPIO5 (18)
  • RST - GPIO6 (22)
  • VCC - 3.3V (1 or 17)
  • GND - GND (39)
sudo modprobe fbtft_device name=adafruit18 gpios=reset:6,dc:5,led:1 speed=16000000 fps=25 rotate=90
[  150.480421] fbtft_device:  SPI devices registered:
[  150.480440] fbtft_device:      spidev spi0.0 33000kHz 8 bits mode=0x00
[  150.480449] fbtft_device:  'fb' Platform devices registered:
[  150.480517] fbtft_device: Deleting spi0.0
[  150.481116] fbtft_device:  GPIOS used by 'adafruit18':
[  150.481128] fbtft_device:    'reset' = GPIO6
[  150.481135] fbtft_device:    'dc' = GPIO5
[  150.481142] fbtft_device:    'led' = GPIO1
[  150.481148] fbtft_device:  SPI devices registered:
[  150.481158] fbtft_device:      fb_st7735r spi0.0 16000kHz 8 bits mode=0x00
[  151.462000] graphics fb8: fb_st7735r frame buffer, 160x128, 40 KiB video memory, 4 KiB buffer memory, fps=25, spi0.0 at 16 MHz
The data sheet specifies the min serial clock cycle time is 66ns for write and 150ns for read.   Even for just writing, the max clock frequency is 15MHz.   Even though the driver seemed to load correctly, I was unable to display anything.   Lowering the SPI clock rate did not help.

I need to go back to see why I was not able to run the display with hardware SPI.

ucglib is another library to try, https://github.com/olikraus/ucglib .  Again the software SPI works, but hardware SPI does not.

I powered both the arduino and  the display with 3.3V.  The hardware SPI worked.  (I mistakenly used D12 as DC, which compounded the problem.  D12 is MISO.)  Even the software SPI behaved a little better (without the some flicking).   So the hardware is fine running 3.3V (drawing about 55mA).

Orange Pi is running at 3.3V, so there are still some configuration issues.  One possibility is the GPIO numbering.   In the GPIO driver, the number is given by (position of letter in alphabet - 1) * 32 + pin number.  Pin 12 is PD14  would be 110.  So I made the following connections,
  • LED+ - 3.3V
  • SCL - SCLK (23)
  • SDA - MOSI (19)
  • CS - CE0 (24)
  • A0 (DC) - GPIO7 (29)
  • RST - GPIO8 (31)
  • VCC - 3.3V (1)
  • GND - GND (39)
The driver is loaded with
sudo modprobe fbtft_device name=adafruit18 gpios=reset:8,dc:7,led:1 speed=16000000 fps=25 rotate=90
[  256.212355] fbtft_device:  SPI devices registered:
[  256.212376] fbtft_device:      spidev spi0.0 33000kHz 8 bits mode=0x00
[  256.212387] fbtft_device:  'fb' Platform devices registered:
[  256.212462] fbtft_device: Deleting spi0.0
[  256.212916] fbtft_device:  GPIOS used by 'adafruit18':
[  256.212930] fbtft_device:    'reset' = GPIO8
[  256.212938] fbtft_device:    'dc' = GPIO7
[  256.212946] fbtft_device:    'led' = GPIO1
[  256.212953] fbtft_device:  SPI devices registered:
[  256.212964] fbtft_device:      fb_st7735r spi0.0 16000kHz 8 bits mode=0x00
[  257.122269] graphics fb8: fb_st7735r frame buffer, 160x128, 40 KiB video memory, 4 KiB buffer memory, fps=25, spi0.0 at 16 MHz
Run fbset -i -fb /dev/fb8
mode "160x128"
    geometry 160 128 160 128 16
    timings 0 0 0 0 0 0 0
    nonstd 1
    rgba 5/11,6/5,5/0,0/0
endmode
Frame buffer device information:
    Name        : fb_st7735r
    Address     : 0
    Size        : 40960
    Type        : PACKED PIXELS
    Visual      : TRUECOLOR
    XPanStep    : 0
    YPanStep    : 0
    YWrapStep   : 0
    LineLength  : 320
    Accelerator : No
It is tested with a self portrait,
sudo fbi -d /dev/fb8 -T 1 -noverbose -a KMR18.jpg

The frame buffer can be directly written to, e.g.
dd if=/dev/zero of=/dev/fb8 bs=2 count=20K
dd if=/dev/random of=/dev/fb8 bs=2 count=20K
To run console, map a tty to the fb with con2fbmap 2 8 .  The login prompt displays when switched to tty2.

The next step is to run X windows on it.  I created X11 config file and run startx as the second display.  The X Window did  run on the display; but the X Windows on the HDMI display disappears.   

To start the display on boot, add the kernel module to /etc/modules and parameters to /etc/modprobe.d/fbtft_device.conf .