nuttx/configs/16z
2014-01-24 09:28:52 -06:00
..
include 16z: Fix option bits; adjust system clock frequency 2014-01-23 12:06:57 -06:00
nsh 16z: Fix option bits; adjust system clock frequency 2014-01-23 12:06:57 -06:00
ostest ZNEO: Verify that currrent code still works on the ZiLOG board 2014-01-24 09:28:52 -06:00
scripts configs/16z: Add support for 16z board 2014-01-22 11:50:37 -06:00
src Should enable external bus after configuring it 2014-01-23 17:41:29 -06:00
Kconfig configs/16z: Add support for 16z board 2014-01-22 11:50:37 -06:00
README.txt 16Z: Some early bring-up fixes 2014-01-22 13:46:42 -06:00

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.