.. _mec172xmodular_6930:

Microchip MEC172x Modular Card ASSY6930 (Rev. B)
################################################

Overview
********
The MEC172x Modular Card ASSY6930 (Rev. B) is a development board to evaluate the
Microchip MEC172X series microcontrollers.  This board can work standalone
or be mated with any platform that complies with MECC specification.


.. image:: ./mec172xmodular_assy6930.jpg
   :width: 576px
   :align: center
   :alt: MEC172x Modular ASSY 6930


Hardware
********

- MEC172x (MEC1723, MEC1727 and MEC1728) ARM Cortex-M4 Processor
- 416 KB RAM and 128 KB boot ROM
- UART1 using microUSB
- PECI interface 3.0
- FAN, PWM and TACHO pins
- 5 SMBus instances
- eSPI header
- VCI interface
- 1 hardware driven PS/2 ports
- Keyboard interface headers

For more information about the SOC please see `MEC172x Reference Manual`_

At difference from MEC172x evaluation board, modular MEC172x exposes the pins in 2 different ways:

1) Standalone mode via headers

   - GPIOs
   - JTAG port
   - eSPI bus
   - I2C0, I2C1 and I2C6
   - PWM1, PWM2, PWM3
   - Shared  SPI
   - Keyboard Interface

2) Mated mode with another platform that has a high density MECC connector

   - FAN, PWM8
   - I2C3 and I2C7
   - eSPI bus

The board is powered through the +5V USB micro-A connector or from the MECC connector.


Supported Features
==================

The mec172xmodular_assy6930 (Rev. B) board configuration supports the following hardware features:

+-----------+------------+-------------------------------------+
| Interface | Controller | Driver/Component                    |
+===========+============+=====================================+
| NVIC      | on-chip    | nested vector interrupt controller  |
+-----------+------------+-------------------------------------+
| SYSTICK   | on-chip    | systick                             |
+-----------+------------+-------------------------------------+
| UART      | on-chip    | serial port                         |
+-----------+------------+-------------------------------------+
| GPIO      | on-chip    | gpio                                |
+-----------+------------+-------------------------------------+
| I2C       | on-chip    | i2c                                 |
+-----------+------------+-------------------------------------+
| PINMUX    | on-chip    | pinmux                              |
+-----------+------------+-------------------------------------+
| PS/2      | on-chip    | ps2                                 |
+-----------+------------+-------------------------------------+
| KSCAN     | on-chip    | kscan                               |
+-----------+------------+-------------------------------------+
| TACH      | on-chip    | tachometer                          |
+-----------+------------+-------------------------------------+
| RPMFAN    | on-chip    | Fan speed controller                |
+-----------+------------+-------------------------------------+

Other hardware features are not currently supported by Zephyr (at the moment)

The default configuration can be found in the
:zephyr_file:`boards/arm/mec172xmodular_assy6930/mec172xmodular_assy6930_defconfig` Kconfig file.

Connections and IOs
===================

This evaluation board kit is comprised of the following HW blocks:

- MEC172x Modular ASSY 6930 Rev B1 `MEC172x Modular EC Card - Assy_6930 Rev B1p1`_

System Clock
============

The MEC172x MCU is configured to use the 96Mhz internal oscillator with the
on-chip PLL to generate a resulting EC clock rate of 12 MHz. See Processor clock
control register in chapter 4 "4.0 POWER, CLOCKS, and RESETS" of the data sheet in
the references at the end of this document.

Serial Port
===========

UART1 is configured for serial logs.

Jumper settings
***************

Please follow the jumper settings below to properly demo this
board. Advanced users may deviate from this recommendation.

Jumper setting for MEC172x Modular Assy 6930 Rev B1p1
=====================================================

Power-Related Jumpers
---------------------
If you wish to power from type A/B connector ``P1`` set the jumper ``JP22 1-2``.
This is required for standalone mode.
If you wish to power through MECC connector ``P2`` and mate to external platform,
set the jumper to ``JP22 2-3``.

NOTE: A single jumper is required in JP22.

If you wish to set VTR2 to 3.3V, set the jumper ``JP26 2-3``.
This is required for Windows application.
If you wish to set VTR2 to 1.8V, set the jumper ``JP26 1-2``.
This is required for Chrome application.

Boot-ROM Straps
---------------
This jumper configures MEC172x Boot-ROM strap.

+---------------------+
| JP23 (UART_BSTRAP)  |
+=====================+
| 1-2                 |
+---------------------+

``JP23 1-2`` pulls UART_BSTRAP to GND.  MEC172x Boot-ROM samples UART_BSTRAP and if low,
UART interface is used for Crisis Recovery.

Boot Source Select
------------------
The jumpers below configure MEC172x to boot from Shared SPI, Slave Attached Flash (SAF)
or Master Attached Flash (MAF).

+-------------------+----------+
| Boot Source       | JP25     |
+===================+==========+
| Shared SPI or SAF | 5-6      |
+-------------------+----------+
| MAF               | 1-2, 4-6 |
+-------------------+----------+


Programming and Debugging
*************************

Setup
=====

#. If you use Dediprog SF100 programmer, then setup it.

   Windows version can be found at the `SF100 Product page`_.

   Linux version source code can be found at `SF100 Linux GitHub`_.
   Follow the `SF100 Linux manual`_ to complete setup of the SF100 programmer.
   For Linux please make sure that you copied ``60-dediprog.rules``
   from the ``SF100Linux`` folder to the :code:`/etc/udev/rules.s` (or rules.d)
   then restart service using:

   .. code-block:: console

      $ udevadm control --reload

   Add directory with program ``dpcmd`` (on Linux)
   or ``dpcmd.exe`` (on Windows) to your ``PATH``.

#. Clone the `MEC172x SPI Image Gen`_ repository or download the files within
   that directory.

#. Make the image generation available for Zephyr, by making the tool
   searchable by path, for example:

   .. code-block:: console

      -DMEC172X_SPI_GEN=<path to spi_gen tool>/mec172x_spi_gen_lin_x86_64

   Note that the tools for Linux and Windows have different file names.

#. The default MEC172X_SPI_CFG file is spi_cfg.txt located in ${BOARD_DIR}/support.
   Example of SPI_CFG for 4MBit (spi_cfg_4MBit.txt) and 128MBit (spi_cfg_128MBit.txt)
   SPI flash can be found in the same folder.  If needed, a custom SPI image
   configuration file can be specified to override the default one.

   .. code-block:: console

      -DMEC172X_SPI_CFG=<path to spi_cfg file>/spi_cfg.txt

#. Example command to generate 128MBit spi image for hello_world:

   .. code-block:: console

      west build -p auto -b mec172xmodular_assy6930 samples/hello_world -- -DMEC172X_SPI_GEN=$HOME/CPGZephyrDocs/MEC172x/SPI_image_gen/mec172x_spi_gen_lin_x86_64 -DMEC172X_SPI_CFG=$HOME/zephyrproject/zephyr/boards/arm/mec172xmodular_assy6930/support/spi_cfg_128MBit.txt


Wiring
========

#. Connect programmer to the header J2 on the ASSY6930 board, it will flash the SPI NOR chip
   ``U2``. Make sure that your programmer's offset is 0x0.
   For programming you can use Dediprog SF100 or a similar tool for flashing SPI chips.

   +------------+---------------+
   |  Dediprog  |               |
   |  Connector |      J2       |
   +============+===============+
   |    VCC     |       1       |
   +------------+---------------+
   |    GND     |       2       |
   +------------+---------------+
   |    CS      |       3       |
   +------------+---------------+
   |    CLK     |       4       |
   +------------+---------------+
   |    MISO    |       6       |
   +------------+---------------+
   |    MOSI    |       5       |
   +------------+---------------+

#. Connect UART1 port of the mec172xmodular_assy6930 (Rev. B) board
   to your host computer using the RS232 cable.

#. Apply power to the board via a micro-USB cable.
   Configure this option by using a jumper between ``JP22 1-2``.

Building
========

#. Build :ref:`hello_world` application as you would normally do.

#. The file :file:`spi_image.bin` will be created if the build system
   can find the image generation tool. This binary image can be used
   to flash the SPI chip.

Flashing
========

#. Run your favorite terminal program to listen for output.
   Under Linux the terminal should be :code:`/dev/ttyUSB0`. Do not close it.

   For example:

   .. code-block:: console

      $ minicom -D /dev/ttyUSB0 -o

   The -o option tells minicom not to send the modem initialization
   string. Connection should be configured as follows:

   - Speed: 115200
   - Data: 8 bits
   - Parity: None
   - Stop bits: 1

#. Flash your board using ``west`` from the second terminal window.
   Split first and second terminal windows to view both of them.

   .. code-block:: console

      $ west flash

   .. note:: When west process started press Reset button ``S1`` and do not release it
    till the whole west process will not be finished successfully.

#. You should see ``"Hello World! mec172xmodular_assy6930"`` in the first terminal window.
   If you don't see this message, press the Reset button and the message should appear.

Debugging
=========
``J1`` header on the board allows for JTAG connections for debug.

Troubleshooting
===============
#. In case you don't see your application running, please make sure ``LED1`` is lit.
   If ``LED1`` is off, check the power-related jumpers again.

#. If you can't program the board using Dediprog, disconnect and reconnect cable connected to
   ``P1`` and try again.

#. If Dediprog can't detect the onboard flash, press the board's ``S1`` Reset button and try again.


References
**********
.. target-notes::

.. _MEC172x Reference Manual:
    https://github.com/MicrochipTech/CPGZephyrDocs/blob/master/MEC172x/MEC172x-Data-Sheet.pdf
.. _MEC172x Modular EC Card - Assy_6930 Rev B1p1:
    https://github.com/MicrochipTech/CPGZephyrDocs/blob/master/MEC172x/MEC172X-MECC_Assy_6930_B1p1-SCH.pdf
.. _MEC172x SPI Image Gen:
    https://github.com/MicrochipTech/CPGZephyrDocs/tree/master/MEC172x/SPI_image_gen
.. _SF100 Linux GitHub:
    https://github.com/DediProgSW/SF100Linux
.. _SF100 Product page:
    https://www.dediprog.com/product/SF100
.. _SF100 Linux manual:
    https://www.dediprog.com/download/save/727.pdf
