This is an automated email from the ASF dual-hosted git repository. acassis pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit b1993545de258dfa32a245f3f6d70a9797b4eb6f Author: Alan Carvalho de Assis <[email protected]> AuthorDate: Thu Oct 15 16:28:54 2026 -0300 Documentation: add Digital Dream EC300 board documentation Document the ddcnc-ec300 board: features, serial console (RS-232 on the "UART" connector), Ethernet, LEDs, the motion control I/O map, flashing and backing up the original firmware with OpenOCD, and the nsh and netnsh configurations. Signed-off-by: Alan Carvalho de Assis <[email protected]> Assisted-by: Claude Opus 5.5 --- .../arm/imxrt/boards/ddcnc-ec300/ec300.png | Bin 0 -> 1135795 bytes .../arm/imxrt/boards/ddcnc-ec300/index.rst | 283 +++++++++++++++++++++ 2 files changed, 283 insertions(+) diff --git a/Documentation/platforms/arm/imxrt/boards/ddcnc-ec300/ec300.png b/Documentation/platforms/arm/imxrt/boards/ddcnc-ec300/ec300.png new file mode 100644 index 00000000000..e4d94342a3e Binary files /dev/null and b/Documentation/platforms/arm/imxrt/boards/ddcnc-ec300/ec300.png differ diff --git a/Documentation/platforms/arm/imxrt/boards/ddcnc-ec300/index.rst b/Documentation/platforms/arm/imxrt/boards/ddcnc-ec300/index.rst new file mode 100644 index 00000000000..0333fa9956d --- /dev/null +++ b/Documentation/platforms/arm/imxrt/boards/ddcnc-ec300/index.rst @@ -0,0 +1,283 @@ +=================== +Digital Dream EC300 +=================== + +.. tags:: arch:arm, chip:imxrt, part:imxrt1052, vendor:nxp + +The Digital Dream EC300 is a 3 to 6 axis Ethernet CNC motion controller +originally designed to be used with the Mach3 software. It is based on the +NXP i.MX RT1052 crossover MCU (ARM Cortex-M7). + +.. figure:: ec300.png + :align: center + +This port is intended to be the hardware base for running a CNC motion +controller entirely on NuttX. The pin information used here was taken from +the `Remora-RT1052 <https://github.com/scottalford75/Remora-RT1052-cpp>`_ +firmware project (which runs on the EC300, EC500 and NVEM boards) and from +the `EC300 User Manual <https://nvcnc.net/pdf/EC300%20User%20Manual%20V2-nvcnc.pdf>`_. + +Features +======== + +- Processor + - MIMXRT1052CVL5B, ARM Cortex-M7 at 528 MHz + - 512 KiB of OCRAM (FlexRAM, no external SDRAM) +- Memory + - 4 MiB Winbond W25Q32 Quad SPI NOR flash on FlexSPI (XIP boot) +- Connectivity + - 10/100 Ethernet, Microchip LAN8720A RMII PHY + - MPG port (Digital Dream NVMPG pendant) on LPUART5 +- Motion control I/O (all opto-isolated) + - 6 step/direction axis outputs (X, Y, Z, A, B, C) + - 12 general purpose digital inputs + - 10 general purpose digital outputs + - 0-10V (or PWM) spindle speed output +- Power + - 24 VDC main supply, separate 24 VDC IO supply + +Supported peripherals +===================== + +The initial port supports the serial console, the CONN LED and the Ethernet +interface. Step generation, digital IO, spindle and MPG drivers will be +added later. + +========== ======= ===================================== +Peripheral Support NOTES +========== ======= ===================================== +LPUART4 Yes Serial console +ENET Yes LAN8720A PHY, RMII, 50 MHz from MCU +GPIO Yes CONN LED +LPUART5 No MPG port, pins already defined +FlexPWM No Spindle PWM / step generation +QDC/ENC No Encoder inputs +========== ======= ===================================== + +Serial Console +============== + +The NuttX console is on LPUART4 at 115200 8N1: + +========== ========== ========== +Function Pad Signal +========== ========== ========== +LPUART4_TX GPIO_B1_00 LPUART4_TX +LPUART4_RX GPIO_B1_01 LPUART4_RX +========== ========== ========== + +The console is available with RS-232 levels on the bottom right connector +of the EC300, labeled:: + + UART + RXD TXD GND + +Connect it to an RS-232 serial port (or a USB to RS-232 adapter): the +connector TXD goes to the PC RXD, the connector RXD goes to the PC TXD and +GND to GND. Do not connect a 3.3V (TTL) USB-to-serial adapter directly to +this connector. + +Ethernet +======== + +The EC300 uses a LAN8720A RMII PHY. The i.MX RT generates the 50 MHz RMII +reference clock on ``ENET_REF_CLK`` and feeds it to the PHY. The PHY uses +MDIO address 0. It has no reset or interrupt line connected to the MCU. + +============= =========== ============= +Function Pad Signal +============= =========== ============= +ENET_RX_DATA0 GPIO_B1_04 ENET_RX_DATA00 +ENET_RX_DATA1 GPIO_B1_05 ENET_RX_DATA01 +ENET_RX_EN GPIO_B1_06 ENET_RX_EN +ENET_TX_DATA0 GPIO_B1_07 ENET_TX_DATA00 +ENET_TX_DATA1 GPIO_B1_08 ENET_TX_DATA01 +ENET_TX_EN GPIO_B1_09 ENET_TX_EN +ENET_REF_CLK GPIO_B1_10 ENET_REF_CLK +ENET_RX_ER GPIO_B1_11 ENET_RX_ER +ENET_MDC GPIO_B1_14 ENET_MDC +ENET_MDIO GPIO_B1_15 ENET_MDIO +============= =========== ============= + +The i.MX RT ENET driver hard-codes MDIO address 1 when +``CONFIG_ETH0_PHY_LAN8720`` is selected. So the board uses +``CONFIG_ETH0_PHY_MULTI`` and supplies its own PHY description through +``BOARD_ETH0_PHY_LIST`` in ``include/board.h``. + +The MAC address comes from the MCU unique ID fuses (OCOTP), so every board +gets a different, stable MAC address. + +The PHY interrupt output is not connected to the MCU either. The board +emulates it by polling (``CONFIG_DDCNC_EC300_PHY_POLL_MSEC``, 1 second by +default), so the PHY notification ioctl (``SIOCMIINOTIFY``) works and the +NETINIT link monitor (``CONFIG_NETINIT_MONITOR``) can detect link changes. +When the cable is plugged in after boot, or unplugged and plugged again, the +interface is brought up again and the PHY renegotiates the link speed. + +LEDs +==== + +There are three LEDs on the front panel: POWER, IO and CONN. POWER and IO +are driven by hardware. CONN is connected to ``GPIO_SD_B1_00`` +(``GPIO3_IO00``) and is lit when the pin is low. + +If ``CONFIG_ARCH_LEDS`` is enabled, NuttX uses the CONN LED to show its +status: + +================= ======================= ===== +SYMBOL Meaning LED +================= ======================= ===== +LED_STARTED NuttX has been started OFF +LED_HEAPALLOCATE Heap has been allocated OFF +LED_IRQSENABLED Interrupts enabled OFF +LED_STACKCREATED Idle stack created ON +LED_INIRQ In an interrupt N/C +LED_SIGNAL In a signal handler N/C +LED_ASSERTION An assertion failed N/C +LED_PANIC The system has crashed FLASH +================= ======================= ===== + +If the LED is always on, NuttX has booted and is running normally. If it +flashes at about 2 Hz, a fatal error was detected and the system has halted. + +If ``CONFIG_ARCH_LEDS`` is not enabled, the CONN LED can be controlled by +applications with the ``USERLED`` driver. + +Motion Control I/O +================== + +Remora uses the following MCU GPIOs for the EC300 machine I/O. No NuttX +drivers use them yet; they are listed here for reference. All inputs are +active low (opto-isolated). + +Step generator outputs: + +==== ======== ========= +Axis Step Direction +==== ======== ========= +X GPIO1_22 GPIO1_17 +Y GPIO1_24 GPIO1_31 +Z GPIO1_18 GPIO1_25 +A GPIO1_27 GPIO1_21 +B GPIO1_16 GPIO1_23 +C GPIO1_20 GPIO1_19 +==== ======== ========= + +Digital inputs: + +===== ======== ===== ======== +Input GPIO Input GPIO +===== ======== ===== ======== +IN01 GPIO4_26 FHA GPIO3_26 +IN02 GPIO4_27 FHB GPIO4_30 +IN03 GPIO4_21 SRO GPIO3_19 +IN04 GPIO4_24 SRJ GPIO4_20 +IN05 GPIO4_28 INDEX GPIO3_22 +IN06 GPIO4_25 WHA GPIO3_16 +IN07 GPIO4_29 WHB GPIO3_17 +IN08 GPIO4_23 CIN GPIO4_18 +IN09 GPIO4_31 XIN GPIO4_17 +IN10 GPIO3_18 YIN GPIO4_16 +IN11 GPIO3_21 ZIN GPIO4_15 +IN12 GPIO3_20 AIN GPIO4_14 +===== ======== ===== ======== + +Digital outputs OT01 to OT10 are on ``GPIO4_02``, ``GPIO4_01``, then +``GPIO4_03`` to ``GPIO4_10``. The MPG handwheel inputs are X100IN +(``GPIO4_13``), X10IN (``GPIO4_12``) and EP (``GPIO4_11``). + +Flashing +======== + +The EC300 boots from its QSPI NOR flash, a Winbond W25Q32 (JEDEC ID +``0xef4016``). The NuttX image includes the FlexSPI configuration block, +image vector table and boot data needed by the i.MX RT boot ROM, so the +image is flashed at the start of the flash (``0x60000000``). The +configurations generate a raw binary (``nuttx.bin``) for this. + +The flash is programmed through the SWD port. OpenOCD has no flash driver +for the i.MX RT FlexSPI controller, so the board provides an OpenOCD +configuration that implements the QSPI NOR erase, program, verify and read +operations as Tcl commands: +``boards/arm/imxrt/ddcnc-ec300/tools/ddcnc-ec300.cfg``. It has been tested +with OpenOCD 0.12.0 and an ST-Link/V2 probe; other probes can be selected +by setting ``INTERFACE`` (e.g. ``-c "set INTERFACE cmsis-dap"``). + +.. warning:: + + Flashing NuttX erases the original Mach3 firmware. Make a backup of the + flash first, so it can be restored later. + +Backup the whole 4 MiB flash:: + + $ openocd -f boards/arm/imxrt/ddcnc-ec300/tools/ddcnc-ec300.cfg \ + -c "init; ec300_flash_dump ec300-original.bin; reset run; shutdown" + +Program NuttX, verify it and reboot the board:: + + $ openocd -f boards/arm/imxrt/ddcnc-ec300/tools/ddcnc-ec300.cfg \ + -c "init; ec300_program nuttx.bin; shutdown" + +Restore the original firmware from the backup:: + + $ openocd -f boards/arm/imxrt/ddcnc-ec300/tools/ddcnc-ec300.cfg \ + -c "init; ec300_program ec300-original.bin; shutdown" + +Other commands provided by the configuration (run them after ``init``): + +=================================== ==================================== +Command Description +=================================== ==================================== +``ec300_flash_info`` Show the JEDEC ID and status registers +``ec300_flash_erase <off> <len>`` Erase a range (4 KiB sectors) +``ec300_flash_erase_all`` Erase the whole flash +``ec300_flash_write <file> [off]`` Program a raw binary file +``ec300_flash_verify <file> [off]`` Compare the flash with a binary file +``ec300_flash_dump <file> [off]`` Read the flash into a file +=================================== ==================================== + +Programming runs at about 7 KiB/s with an ST-Link/V2, so a NuttX image +takes around 25 seconds. + +Configurations +============== + +Each configuration is set up and built like this:: + + $ ./tools/configure.sh ddcnc-ec300:<subdir> + $ make + +Where ``<subdir>`` is one of the following: + +nsh +--- + +A basic NuttShell (NSH) configuration on the LPUART4 serial console. + +netnsh +------ + +Same as ``nsh``, plus Ethernet networking with TCP, UDP, ICMP (ping) and +the Telnet daemon. The network is initialized in a background thread that +keeps monitoring the link state, so the Ethernet cable can be connected +after the board has booted. The board uses a static IPv4 address that matches the +Remora / LinuxCNC defaults: + +=========== =========== +Setting Value +=========== =========== +IP address 10.10.10.10 +Netmask 255.255.255.0 +Gateway 10.10.10.1 +=========== =========== + +To test it, set the host's Ethernet interface to an address in the +``10.10.10.x`` network, then:: + + $ ping 10.10.10.10 + $ telnet 10.10.10.10 + +On the board you can check the interface with:: + + nsh> ifconfig + nsh> ping 10.10.10.1
