402 lines
17 KiB
Plaintext
402 lines
17 KiB
Plaintext
README.txt
|
|
==========
|
|
|
|
This is the README file for the NuttX port to the 16z board. The 16z board
|
|
is based on the ZiLOG ZNEOZ16F2811AL20EG part. See https://github.com/toyaga/16z
|
|
for further information.
|
|
|
|
Contents
|
|
========
|
|
|
|
- GPIO Configuration
|
|
- ZDS-II Compiler Versions
|
|
- Serial Console
|
|
- LEDs
|
|
- RAM
|
|
- Selecting Configurations
|
|
- Configuration Sub-directories
|
|
|
|
GPIO Configuration
|
|
==================
|
|
|
|
--------------------------- ------ --------------------------------------------
|
|
GPIO SIGNAL On-Board Connections
|
|
--------------------------- ------ --------------------------------------------
|
|
PA0/T0IN/T0OUT/DMA0REQ GP8 PS/2 / GPIO, Expansion slots
|
|
PA1/T0OUT/DMA0ACK GP9 PS/2 / GPIO, Expansion slots
|
|
PA2/DE0/FAULTY ~INTI Power section, RF transceiver (1)
|
|
PA3/CTS0/FAULT0 ~INTX Expansion slots
|
|
PA4/RXD0/CS1 RXD MAX3232D RS-232
|
|
PA5/TXD0/CS2 TXD MAX3232D RS-232
|
|
PA6/SCL/CS3 SCL RTC / UID, Expansion slots
|
|
PA7/SDA/CS4 SDA RTC / UID, Expansion slots
|
|
--------------------------- ------ --------------------------------------------
|
|
PB0/ANA0/T0IN0 GP0 Expansion slots
|
|
PB1/ANA1/T0IN1 GP1 Expansion slots
|
|
PB2/ANA2/T0IN2 GP2 Expansion slots
|
|
PB3/ANA3/OPOUT GP3 Expansion slots
|
|
PB4/ANA4 GP4 Expansion slots
|
|
PB5/ANA5 GP5 Expansion slots
|
|
PB6/ANA6/OPINP/CINN GP6 Expansion slots
|
|
PB7/ANA7/OPINN GP7 Expansion slots
|
|
--------------------------- ------ --------------------------------------------
|
|
PC0/T1IN/T1OUT/DMA1REQ/CINN GP10 PS/2 / GPIO, Expansion slots
|
|
PC1/T1OUT/DMA1ACK/COMPOUT GP11 PS/2 / GPIO, Expansion slots
|
|
PC2/SS/CS4 ~EXP Expansion slots
|
|
PC3/SCK/DMA2REQ SCK FT800Q, Serial memory (1), RF Transceiver (1),
|
|
Expansion slots, SD0, 1, and 2
|
|
PC4/MOSI/DMA2ACK MOSI FT800Q, Serial memory (1), RF Transceiver (1),
|
|
Expansion slots, SD0, 1, and 2
|
|
PC5/MISO/CS5 MISO FT800Q, Serial memory (1), RF Transceiver (1),
|
|
Expansion slots, SD0, 1, and 2
|
|
PC6/T2IN/T2OUT/PWMH0 ~CTS MAX3232D RS-232
|
|
PC7/T2OUT/PWML0 ~RTS MAX3232D RS-232, Power section (?)
|
|
--------------------------- ------ --------------------------------------------
|
|
PD0/PWMH1/ADR20 A20 RAM, Expansion slots
|
|
PD1/PWML1/ADR21 A21 RAM, Expansion slots
|
|
PD2/PWMH2/ADR22 A22 RAM, Expansion slots
|
|
PD3/DE1/ADR16 A16 RAM, Expansion slots
|
|
PD4/RXD1/ADR18 A18 RAM, Expansion slots
|
|
PD5/TXD1/ADR19 A19 RAM, Expansion slots
|
|
PD6/CTS1/ADR17 A17 RAM, Expansion slots
|
|
PD7/PWML2/ADR23 A23 Expansion slots
|
|
--------------------------- ------ --------------------------------------------
|
|
PE0/DATA0 D0 RAM, Expansion slots
|
|
PE1/DATA1 D1 RAM, Expansion slots
|
|
PE2/DATA2 D2 RAM, Expansion slots
|
|
PE3/DATA3 D3 RAM, Expansion slots
|
|
PE4/DATA4 D4 RAM, Expansion slots
|
|
PE5/DATA5 D5 RAM, Expansion slots
|
|
PE6/DATA6 D6 RAM, Expansion slots
|
|
PE7/DATA7 D7 RAM, Expansion slots
|
|
--------------------------- ------ --------------------------------------------
|
|
PF0/ADR0 A0 Expansion slots
|
|
PF1/ADR1 A1 RAM, Expansion slots
|
|
PF2/ADR2 A2 RAM, Expansion slots
|
|
PF3/ADR3 A3 RAM, Expansion slots
|
|
PF4/ADR4 A4 RAM, Expansion slots
|
|
PF5/ADR5 A5 RAM, Expansion slots
|
|
PF6/ADR6 A6 RAM, Expansion slots
|
|
PF7/ADR7 A7 RAM, Expansion slots
|
|
--------------------------- ------ --------------------------------------------
|
|
PG0/ADR0 A8 RAM, Expansion slots
|
|
PG1/ADR0 A9 RAM, Expansion slots
|
|
PG2/ADR0 A10 RAM, Expansion slots
|
|
PG3/ADR0 A11 RAM, Expansion slots
|
|
PG4/ADR0 A12 RAM, Expansion slots
|
|
PG5/ADR0 A13 RAM, Expansion slots
|
|
PG6/ADR0 A14 RAM, Expansion slots
|
|
PG7/ADR0 A15 RAM, Expansion slots
|
|
--------------------------- ------ --------------------------------------------
|
|
PH0/ANA8/WR ~WR RAM, Expansion slots
|
|
PH1/ANA9/RD ~RD RAM, Expansion slots
|
|
PH2/ANA10/CS0 ~RF LED3, RF transceiver, X2 (1)
|
|
PH3/ANA11/CINP/WAIT ~SXM LED4, Chip select for the serial memory, U4 (1)
|
|
--------------------------- ------ --------------------------------------------
|
|
PJ0/DATA8 ~SD1 LED5, Chip select for the SD card 1, X11.
|
|
PJ1/DATA9 ~DT1 Card detect for SD card 1
|
|
PJ2/DATA10 WP1 Write protect for SD card 1
|
|
PJ3/DATA11 EVE EVE chip select
|
|
PJ4/DATA12 ~SD2 LED6, Chip select for the SD card 2, X10.
|
|
PJ5/DATA13 ~DT2 Card detect for SD card 2
|
|
PJ6/DATA14 WP2 Write protect for SD card 2
|
|
PJ7/DATA15 ~SD0 LED7, Chip select for the microSD 0, X12.
|
|
--------------------------- ------ --------------------------------------------
|
|
PK0/BHEN ~BHE RAM, Expansion slots
|
|
PK1/BLEN ~BLE RAM, Expansion slots
|
|
PK2/CS0 ~0000 Bottom RAM bank, Expansion slots
|
|
PK3/CS1 ~8000 Top RAM bank, Expansion slots
|
|
PK4/CS2 ~F000 Expansion slots
|
|
PK5/CS3 ~FFC8 Expansion slots
|
|
PK6/CS4 ~FFD0 Expansion slots
|
|
PK7/CS5 ~FFD8 Expansion slots
|
|
--------------------------- ------ --------------------------------------------
|
|
|
|
Note 1: Not populated on my board
|
|
|
|
ZDS-II Compiler Versions
|
|
========================
|
|
|
|
Version 5.0.1
|
|
|
|
All testing has been performed with ZSD II verion 5.0.1 for the ZNEO.
|
|
|
|
Other Versions
|
|
|
|
If you use any version of ZDS-II other than 5.0.1 or if you install ZDS-II
|
|
at any location other than the default location, you will have to modify
|
|
two files: (1) configs/16z/*/setenv.sh and (2) configs/16z/*/Make.defs.
|
|
Simply edit these two files, changing 5.0.1 to whatever.
|
|
|
|
Serial Console
|
|
==============
|
|
|
|
The 16z supports a single UART, UART0, that will be used to support the
|
|
NuttX serial console.
|
|
|
|
LEDs
|
|
====
|
|
|
|
The 16z board has 7 LEDs, five of which are controllable via software:
|
|
|
|
----- ------ ------ ------------------------------------
|
|
LED Color Signal Description
|
|
----- ------ ------ ------------------------------------
|
|
LED1 Red 3V3 Indicates the presence of +3.3V
|
|
LED2 Red 5V Indicates the presence of +5V
|
|
|
|
LED3 Blue ~RF Controlled via PH2. Notes: 1, 2
|
|
LED4 Green ~SXM Controlled via PH3. Notes: 1, 3
|
|
LED5 Green ~SD1 Controlled via PJ0. Notes: 1, 4
|
|
LED6 Yellow ~SD2 Controlled via PJ4. Notes: 1, 5
|
|
LED7 Yellow ~SD0 Controlled via PJ7. Notes: 1, 6
|
|
----- ------ ------ ------------------------------------
|
|
|
|
Note 1: Pulled high so a low output illuminates the LED.
|
|
Note 2: PH2/~RF is also used by the RF transceiver, X2. That part is not
|
|
populated on my board.
|
|
Note 3: ~SXM is the chip select for the serial memory, U4. That part is
|
|
not populated on my board.
|
|
Note 4: ~SD1 is the chip select for the SD card 1, X11.
|
|
Note 5: ~SD2 is the chip select for the SD card 2, X10.
|
|
Note 6: ~SD0 is the chip select for the microSD 0, X12.
|
|
|
|
In conclusion: None of the LEDs are available to indicate software status
|
|
without potentially sacrificing board functionality. If the RF transceiver
|
|
is not installed (CONFIG_16Z_RFTRANSCEIVER=n) and if LED support is
|
|
requested (CONFIG_ARCH_LEDS), then LED3 will be used to indicate status: A
|
|
solid color means that the board has boot successfully; flashing at a rate
|
|
of approximately 2Hz indicates a software failure.
|
|
|
|
RAM
|
|
===
|
|
|
|
The 16z has two IS66WVE4M16BLL 64Mb (4M x 16b) "Pseudo" SRAM parts on board.
|
|
This provides a total of 16MiB of SRAM from program usage.
|
|
|
|
Selecting Configurations
|
|
========================
|
|
|
|
Variations on the basic 16z configuration are maintained in subdirectories.
|
|
To configure any specific configuration, do the following steps:
|
|
|
|
cd <nuttx-top-directory>/tools
|
|
./configure.sh 16z/<sub-directory>
|
|
cd <nuttx-top-directory>
|
|
make
|
|
|
|
Where <sub-directory> is the specific board configuration that you wish to
|
|
build. The following board-specific configurations are available.
|
|
|
|
Before entering the make command, make certain that the path to the ZNEO
|
|
compiler is in you PATH variable. You make modify and use the setenv.sh
|
|
script to set that PATH if you like. You can simply source setenv.sh
|
|
before making like:
|
|
|
|
...
|
|
. ./setenv.sh
|
|
make
|
|
|
|
|
|
Configuration Sub-directories
|
|
=============================
|
|
|
|
source/ and include/
|
|
--------------------
|
|
|
|
These directories contain common logic for all 16z configurations.
|
|
|
|
nsh
|
|
---
|
|
nsh:
|
|
This configuration directory will built the NuttShell (NSH). See
|
|
the NSH user manual in the documents directory (or online at nuttx.org).
|
|
See also the README.txt file in the nsh sub-directory for information
|
|
about using ZDS-II.
|
|
|
|
NOTES:
|
|
|
|
1. This configuration uses the mconf-based configuration tool. To
|
|
change this configuration using that tool, you should:
|
|
|
|
a. Build and install the kconfig-mconf tool. See nuttx/README.txt
|
|
and misc/tools/
|
|
|
|
b. Execute 'make menuconfig' in nuttx/ in order to start the
|
|
reconfiguration process.
|
|
|
|
2. By default, this configuration assumes that you are using the
|
|
Cygwin environment on Windows. An option is to use the native
|
|
CMD.exe window build as described in the top-level README.txt
|
|
file. To set up that configuration:
|
|
|
|
-CONFIG_WINDOWS_CYGWIN=y
|
|
+CONFIG_WINDOWS_NATIVE=y
|
|
|
|
And after configuring, make sure that CONFIG_APPS_DIR uses
|
|
the back slash character. For example:
|
|
|
|
CONFIG_APPS_DIR="..\apps"
|
|
|
|
NOTES:
|
|
|
|
a. If you need to change the toolchain path used in Make.defs, you
|
|
will need to use the short 8.3 filenames to avoid spaces. On my
|
|
PC, C:\PROGRA~1\ is is C:\Program Files\ and C:\PROGRA~2\ is
|
|
C:\Program Files (x86)\
|
|
b. I have not tried to use this configuration with the native
|
|
Windows build, but I would expect the same issues as is listed
|
|
for the ostest configuration..
|
|
|
|
STATUS:
|
|
Currently, NSH failes nsh_consoleoutput(). Here is an example.
|
|
This echo command causes the system to hang:
|
|
|
|
nsh> echo abc
|
|
|
|
Below is some annotated output from the debugger. Here is the 30,000 ft view:
|
|
|
|
- cmd_echo loops for each argv[i], 1 >=i > argc.
|
|
|
|
- It calls:
|
|
|
|
vtbl->output(vtbl, "%s ", argv[i])
|
|
|
|
where the prototype for output is:
|
|
|
|
int (*output)(FAR struct nsh_vtbl_s *vtbl, const char *fmt, ...);
|
|
|
|
- vtbl->output maps to nsh_consoleoutput() in this case.
|
|
|
|
- cmd_echo passes all of the arguments to output in registers.
|
|
|
|
- nsh_consoleoutput expects all of the parameters on the stack.
|
|
|
|
- nsh_console calls vfprintf() using bad values from the stack.
|
|
|
|
- vfprintf crashes and never returns.
|
|
|
|
Looks like a compiler bug to me.
|
|
|
|
# int cmd_echo(FAR struct nsh_vtbl_s *vtbl, int argc, char **argv)
|
|
#
|
|
# All input parameters are in registers
|
|
#
|
|
# R1=00802DA0 # vtbl
|
|
# R2=00000002 # argc
|
|
# R3=00802D15 # argv
|
|
# # argv[0]=00802DD7
|
|
# # argv[1]=00802DDC
|
|
# # 00802DD7="echo\0abc\0"
|
|
# SP=00802CDD
|
|
|
|
0001024C 05F0 PUSHMHI <R8-R11> # SP=00802CCD
|
|
0001024E 4418 LD R8,R1 # R8=00802DA0 vtbl
|
|
00010250 442A LD R10,R2 # R10=00000002 argc
|
|
00010252 443B LD R11,R3 # R11=00802D15 argv
|
|
00010254 3901 LD R9,#%1 # R9=00000001 arg index
|
|
00010256 C00C JP %10270
|
|
|
|
00010270 A5A9 CP R9,R10 # Bottom of loop
|
|
00010272 E1F2 JP lt,%10258
|
|
|
|
00010258 48840010 LD R4,%10(R8) # R4=00011156 adddress of output() method
|
|
0001025C 4490 LD R0,R9 # R0=00000001 Index of argv[1]
|
|
0001025E BC20 SLL R0,#%2 # R0=00000004 Offset to argv[1]
|
|
00010260 A0B0 ADD R0,R11 # R0=00802D19 Address of argv[1]
|
|
00010262 4481 LD R1,R8 # R1=00802DA0 vtbl address
|
|
00010264 452200008ADB LD R2,#%8ADB # R2=00008ADB = "%s "
|
|
0001026A 1203 LD R3,(R0) # R3=00802DDC Value of argv[1]
|
|
0001026C F214 CALL (R4) # Call vtbl->output(vtbl, "%s ", argv[i]);
|
|
# vtbl->output is nsh_consoleoutput
|
|
|
|
# static int nsh_consoleoutput(FAR struct nsh_vtbl_s *vtbl, const char *fmt, ...)
|
|
#
|
|
# All parameters are in registers:
|
|
#
|
|
# R1=00802DA0 vtbl address
|
|
# R2=00008ADB "%s "
|
|
# R3=00802DDC Value of argv[1]
|
|
|
|
# First is a check if the output file is open
|
|
#
|
|
# if (nsh_openifnotopen(pstate) != 0)
|
|
# {
|
|
# return ERROR;
|
|
# }
|
|
|
|
00011156 0800 LINK #%0 # SP=00802CC9, R14=00802CC9
|
|
00011158 5C81 LD R1,%8(FP) # R1=0000017F Should be value file FILE * for output
|
|
0001115A DF96 CALL %11088 # Call nsh_openifnotopen(), returns R0=00000000
|
|
0001115C 9000 CP R0,#%0
|
|
0001115E E602 JP z,%11164 # Skip over error return
|
|
|
|
00011160 30FF LD R0,#-%1
|
|
00011162 C007 JP %11172
|
|
|
|
# Then the failing call to vfprintf:
|
|
#
|
|
# va_start(ap, fmt);
|
|
# ret = vfprintf(pstate->cn_outstream, fmt, ap);
|
|
# va_end(ap);
|
|
#
|
|
# return ret;
|
|
|
|
00011164 4D03 LEA R3,%10(FP) # R3=00802CD5 ap=GARBAGE
|
|
00011166 5C80 LD R0,%8(FP) # R0=0000017F Should be value of pstate
|
|
00011168 48010033 LD R1,%33(R0) # R1=01000000 pstate->cn_outstream. Looks suspicious
|
|
0001116C 5CC2 LD R2,%C(FP) # R2=00802DA0
|
|
0001116E F10003FB CALL %11968 # Call vfprintf(01000000, 00802DA0, 00802CD5)
|
|
# All arguments are bad
|
|
# Does not survive call to vfprintf
|
|
|
|
ostest
|
|
------
|
|
|
|
This builds the examples/ostest application for execution from FLASH.
|
|
See the README.txt file in the ostest sub-directory for information
|
|
about using ZDS-II. See also apps/examples/README.txt for information
|
|
about ostest.
|
|
|
|
NOTES:
|
|
|
|
1. This configuration uses the mconf-based configuration tool. To
|
|
change this configuration using that tool, you should:
|
|
|
|
a. Build and install the kconfig-mconf tool. See nuttx/README.txt
|
|
and misc/tools/
|
|
|
|
b. Execute 'make menuconfig' in nuttx/ in order to start the
|
|
reconfiguration process.
|
|
|
|
2. By default, this configuration assumes that you are using the
|
|
Cygwin environment on Windows. An option is to use the native
|
|
CMD.exe window build as described in the top-level README.txt
|
|
file. To set up that configuration:
|
|
|
|
-CONFIG_WINDOWS_CYGWIN=y
|
|
+CONFIG_WINDOWS_NATIVE=y
|
|
|
|
And after configuring, make sure that CONFIG_APPS_DIR uses
|
|
the back slash character. For example:
|
|
|
|
CONFIG_APPS_DIR="..\apps"
|
|
|
|
NOTES:
|
|
|
|
a. If you need to change the toolchain path used in Make.defs, you
|
|
will need to use the short 8.3 filenames to avoid spaces. On my
|
|
PC, C:\PROGRA~1\ is is C:\Program Files\ and C:\PROGRA~2\ is
|
|
C:\Program Files (x86)\
|
|
b. You can't use setenv.sh in the native Windows environment. Try
|
|
scripts/setenv.bat instead.
|
|
c. At present, the native Windows build fails at the final link stages.
|
|
The failure is due to problems in arch/z16/src/nuttx.linkcmd that
|
|
is autogenerated by arch/z16/src/Makefile. The basic problem
|
|
is the spurious spaces and and carrirage returns are generated at
|
|
the end of the lines after a line continuation (\ ^M). If these
|
|
trailing bad characters are manually eliminated, then the build
|
|
will succeed on the next try.
|
|
|
|
Check out any README.txt files in these <sub-directory>s.
|