arrow-left

Only this pageAll pages
gitbookPowered by GitBook
1 of 31

NXP UCANS32K1 CAN Nodes

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

UCANS32K1SIC demo application

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

Hardware Reference

Loading...

S32K1 SDK

Loading...

Loading...

Apache NuttX

Loading...

Loading...

Loading...

Loading...

Loading...

Loading...

PX4 Autopilot

Loading...

Loading...

Loading...

External Sources

SLCAN

hashtag
What is SLCAN?

SLCAN is an interface for CAN communication over a serial line.

circle-exclamation

November 2020: SLCAN support is not yet publicly available. We hope to release this as soon as possible, but it will likely take us at least a few more weeks.

triangle-exclamation

This page is still under construction.

PX4 examples to try

Assuming you have successfully connected via the UART and are seeing the PX4/NuttX nsh> prompt, you can try a few things using PX4/NuttX

nsh> help

This will show you basic help as well as list the Builtin Apps.

Try running some of the builtin apps: (Lines beginning with # below are just comments)

As you can see there are also a number of other builtin apps ready to test servo's, I2C devices, SPI devices, and even a GPS when attached.

hashtag
Testing CAN between two UCANS32K146 boards using PX4 CAN utilities

If you followed the instructions on the previous page to enable CAN utilities in PX4, then follow the steps below to test CAN communication between the boards.

  1. Connect two UCANS32K146 boards with the included CAN cable (yellow and white twisted pair with red and black power lines)

  2. Connect a termination resistor to each board on the same bus

  3. Boot up each board and connect to them using the included debuggers

Once you run the cansend command on the sending board, you should see some output on the receiving board indicating that it received a message with arbitration ID 0x123 and data 0xDEADBEEF.

If this was successful, you have now successfully demonstrated CAN bus communication on UCANS32K146 running PX4.

nsh> #run hello world
nsh> hello

nsh> #control the onboard RGB LED 
nsh> led_control breathe -c cyan

nsh> #check the actual RGB PWM driver status
nsh> rgbled_pwm status

nsh> #view the rtos processes
nsh> top

nsh> #check the hardware version and git verion
nsh> ver hw
nsh> ver git

SocketCAN

hashtag
What is SocketCAN?

SocketCAN is a set of open source CAN drivers and a networking stack contributed by Volkswagen Research to the Linux kernel. Formely known as Low Level CAN Framework (LLCF). -- Wikipediaarrow-up-right

triangle-exclamation

This page is still under construction.

Run the following commands to communicate between boards over the CAN bus:

# On the receiving board:
nsh> ifup can0 # or can1 if using the can1 bus
nsh> candump can0

# On the sending board:
nsh> ifup can0
nsh> cansend can0 123#deadbeef

PostCard quick reference

Quick reference to connectors and pinouts for UCANS32K146. CANSIC board follows the same pinout, but includes a second RC-PWM port and connector

Disclaimer

This page contains important information that you should be aware of before using UCANS32K146.

hashtag
Important Notice

NXP provides the enclosed product(s) under the following conditions:

This reference design is intended for use of ENGINEERING DEVELOPMENT OR EVALUATION PURPOSES ONLY. It is provided as a sample IC pre-soldered to a printed circuit board to make it easier to access inputs, outputs, and supply terminals. This reference design may be used with any development system or other source of I/O signals by simply connecting it to the host MCU or computer board via off-the-shelf cables. Final device in an application will be heavily dependent on proper printed circuit board layout and heat sinking design as well as attention to supply filtering, transient suppression, and I/O signal quality.

The goods provided may not be complete in terms of required design, marketing, and or manufacturing related protective considerations, including product safety measures typically found in the end product incorporating the goods.

Due to the open construction of the product, it is the user's responsibility to take any and all appropriate precautions with regard to electrostatic discharge. In order to minimize risks associated with the customers applications, adequate design and operating safeguards must be provided by the customer to minimize inherent or procedural hazards. For any safety concerns, contact NXP sales and technical support services. Should this reference design not meet the specifications indicated in the kit, it may be returned within 30 days from the date of delivery and will be replaced by a new kit.

NXP reserves the right to make changes without further notice to any products herein. NXP makes no warranty, representation or guarantee regarding the suitability of its products for any particular purpose, nor does NXP assume any liability arising out of the application or use of any product or circuit, and specifically disclaims any and all liability, including without limitation consequential or incidental damages.

Typical parameters can and do vary in different applications and actual performance may vary over time. All operating parameters, including Typical, must be validated for each customer application by customer’s technical experts.

NXP does not convey any license under its patent rights nor the rights of others. NXP products are not designed, intended, or authorized for use as components in systems intended for surgical implant into the body, or other applications intended to support or sustain life, or for any other application in which the failure of the NXP product could create a situation where personal injury or death may occur. Should the Buyer purchase or use NXP products for any such unintended or unauthorized application, the Buyer shall indemnify and hold NXP and its officers, employees, subsidiaries, affiliates, and distributors harmless against all claims, costs, damages, and expenses, and reasonable attorney fees arising out of, directly or indirectly, any claim of personal injury or death associated with such unintended or unauthorized use, even if such claim alleges NXP was negligent regarding the design or manufacture of the part.

DEMO: UCANS321SIC running the demo software

DEMO: UCANS32K1SIC Hardware setup

How to connect two UCANS32K1SIC boards in preparation to run the demo software

DRAFT

Show image of PC with USB - UART cable(s) and USB mini power cable connected to CAN-TERM-BRD. Show two UCAN boards connected via the CAN wires. The CAN-TERM boards should be at either end. only one CAN-TERM board should provide 5V power via some USB-Micro cable connection.

NOTE - USB-Micro cable is not included.

Demo: UCANS32K1SIC Introduction

A sample application based on PX4/NuttX has been prepared that can be flashed to the UCANS32K1SIC boards. The basic premise is to form a two node CAN-FD network, and give you a console terminal available on each board using

the UART/USB cable connected to your PC.

Simple commands can be issued on each node to initiate CAN-FD communications.

The UCAN boards will be powered via 5V injected through he CAN-TERM board microUSB connection.

UCANS32K1 family CAN node boards

This GitBook provides the technical details of the NXP RDDRONE-UCANS32K1 famly of CAN-FD and CAN-SIC boards with UAVCAN protocol support, as well as reference software and examples.

circle-check

Also take a look at some of our other Gitbooks:

  • (Main page)

  • - Ubuntu Linux Companion Computer with ROS2

  • - Six port CAN with T1 Ethernet

triangle-exclamation

This GitBook is still a work in progress!

circle-info

Note that the is the preferred board to use. The (Secure) is more advanced and will require accessing secure documentation from NXP DocStore to take advantage of the capability of the CAN PHYs

circle-check

See also the for questions and answers about all our mobile robotics reference designs. There is also .

hashtag
What are the UCANS32K1 node boards?

UCANS32K146 and UCANS32K1SIC development boards are general purpose CAN node reference designs. They can be used for any purpose, however specific software has been provided for drones, rovers and other small (autonomous) vehicles. This software allows it to act as a bridge between a CAN bus (with ) and I2C, SPI, UART, GPIO or any other pin function of the (80 MHz ARM Cortex-M4F, ASIL-B compliant). This allows sensors, actuators and other peripherals to be controlled by other devices on the same CAN bus, such as the flight management unit reference design.

circle-check

The relevant part numbers are:

  • KIT-UCANS32K1SIC (complete development kit with two UCANS32KSIC boards, a debugger and an adapter board - everything you need to get started!)

hashtag
Use cases

Possible use cases are:

  1. PWM output for motor controllers or servos

    • Relieves the FMU of creating RC-PWM signals

    • Can report information about the motors back to the FMU

hashtag
Board specifications

  • (80 MHz ARM Cortex-M4F, ASIL-B compliant)

  • Dual

    • OR Dual NXP TJA1463 CAN-SIC transceivers (with dual )

More information is .

hashtag
Hardware designs and example software

The hardware schematics and board layout for UCANS32K146 and . We encourage you to create your own designs based on our UCANS32K146 board!

We do not only provide hardware designs, there is also plenty of example software available. There are multiple options to use the UAVCAN protocol. We have also worked with the Apache NuttX and PX4 Autopilot communities to enable their open source software projects on the UCANS32K146.

Additional designs and example software might be made available in the future.

hashtag
Contribute to this GitBook

We would really like to receive your feedback regarding this GitBook. It is synchronized to a , so you can just open an issue. If you want to contribute you can also open a pull request. The pages are written using an extended version of , so it should be pretty straightforward to add sections or even complete pages!

This work is licensed under a .

DEMO: APA102 RGB LED control via UCANS32K146 using Logitech F310

hashtag
Introduction

This tutorial aims to explain how to connect an APA102 based RGB LED "pixel led" board and control light intensity via a Joystick with ROS2.

hashtag
Items needed

For this demo you will need:

  • An APA102 based RGB LED "pixel led" board

  • UCANS32K146 or UCANS32K1SIC board

  • NAVQ board

Shown below is a RGB LED headlight board (as used in ) with 10 leds numerated fom LED1 to LED10.

hashtag
Daisy chain connection of APA102 LEDs

The 10-LED PCB board has 4 wired connections: DATA CLK, PWR, GROUND. The DATA line(wire) of the board connects to the Data_in of the first LED. Each LED is daisy chained to the next from Data_out pin of one to Data_IN of the next, and so on.

circle-info

There are other APA102 LED boards that might be used. For example there are 3-LED boards also on El Mandadero. These boards can also daisy chain from one board to the next. From the software point of view these are just considered one long string of LEDs.

hashtag
Connecting the LED board to the UCAN board.

The 10-LED "headlight board" shown here is built from an American standard taillight. The internal board has been changed from a simple "on-bright, on-dim" direct DC wiring to the digital connection to these RGB LEDs. Therefore an extra black wire was added to the plastic assembly.

10-LED "Headlight"
Signal
SPI Port (P1) Pin
UCAN Jumper wire color

Arbitrary colored jumper wires were used to connect between the 10=LED headlight board and the SPI port pin header on the UCAN board. The colors used on the UCAN side were as follows:

Jumper wire color
UCAN/SPIRole

The wires on the UCAN board are shown connected in the following image:

NOTE that the color codes above are non-standard. They should be checked when any different LED boards are being connected.

NOTE that the power 5V may also PREFERRABLY be supplied by using the servo 5V output and providing external 5V power from the BEC header (BEC = 5V DCDC converter) See below for board reference:

hashtag
Software procedure

hashtag
NavQPlus software

Connect to NavQPlus via a serial console or though ssh over Ethernet or Wifi. (See NavQPlus gitbook documentation for more details)

hashtag
CAN tools

Ensure can-utils and Python are installed on NavQPlus, if not, install the required packages:

hashtag
Configure CAN bus

Then, reset and configure the NavQPlus CAN bus interfaces:

hashtag
ROS2 setup

If not already installed, Install ros2_orchestrator ROS packages from GitHub.

circle-info

You need to set up your ssh keys for GitHub. If you want to use your token, just change the ssh URLs to HTTPS URLs.

<todo: change links from rudislabs to NXP>

Build the package:

run the following command in a bash terminal to automatically set up your ROS environment at startup of a bash terminal:

Then source your bashrc to ensure it is effective in the current session.

Now, run the following ROS command. It will install dependent packages:

After it runs re-source your bashrc and re-run the same launch script:

Open a second ssh session, and run the joy node to begin the connection with the joystick:

hashtag
Operation of the demo

Now your LEDs are ON and you should be able to control the light intensity.

Use the left and right buttons of the joystick (buttons in front of the device - see picture below) to play with the colors.

UAVCAN quick start demo

CAN-FD echo example between two UCANS32K146 boards, sending UAVCAN V1 messages at 1 Mbit/s in nominal phase and 4 Mbit/s in data phase.

hashtag
S32 Design Studio for ARM

Download and install S32 Design Studio for ARM. It's available for Windows and Linux.

hashtag
UCANS32K146 hardware setup

  • Interconnect two UCANS32K146 boards with a single 4-wire JST-GH CAN cable between both CAN2 connectors, and CAN bus terminators in the CAN1 connectors below.

  • Connect a 5V supply to the pin headers.

circle-info

This pictures was taken with an earlier version of the UCANS32K146 board, there might be some (minor) differences in board layout. The software settings should be the same, though.

hashtag
S32 Design Studio example project

1. In S32 Design Studio, go to "File" and then "Import...":

2. Select "Projects from Git" and click "Next":

3. Paste the Git URL () of the demo and click "Next":

4. Select the master branch and click "Next".

5. Click "Browse", select the desired destination directory for the project and click "Next".

6. Choose "Import existing Eclipse projects", click "Next" and then "Finish".

7. Click the small arrow at the right of the build icon (the hammer) in the toolbar and select NODE_A to build the code for the first board (transmitter).

8. Click the yellow lightning shaped icon in the toolbar for flashing the project to the board.

9. In the list located at the left of the popup window, choose the appropriate profile, e.g. "libuavcanV1_demo_Debug NODE_A" if you are building the code for NODE_A. Then click "Flash" with the board connected to the J-Link debugger. Don't forget to power the board (5V)!

10. Repeat steps 7-9 for the other board but with the desired build configuration changed to NODE_B.

11. A green led close to the 5V headers should blink approximately once a second. Also see the description at the top of the src/main.cpp file. If the green LED from both boards is not blinking, try pressing the reset button on the board that got the NODE_A program flashed into, which is the one that starts the transmission.

With an oscilloscope or logic analyzer you can view the frames being transmitted at 4Mbit/s data phase speed and at 1Mbit/s in nominal phase:

About Apache NuttX

NuttX is an embedded RTOS with an emphasis on standards compliance and small footprint.

hashtag
What is NuttX?

NuttX is a real-time operating system (RTOS) with an emphasis on standards compliance and small footprint. Scalable from 8-bit to 32-bit microcontroller environments, the primary governing standards in NuttX are Posix and ANSI standards. Additional standard APIs from Unix and other common RTOS’s (such as VxWorks) are adopted for functionality not available under these standards, or for functionality that is not appropriate for deeply-embedded environments (such as fork()). -- Apache NuttX websitearrow-up-right

NuttX was created by Gregory Nutt and he has been one of the main developers for a very long time. In 2019 the RTOS was accepted as an incubating project under the Apache Software Foundation, which means it is currently undergoing the process to become an official ASF project. There is now a management committee in place that oversees the ongoing development of NuttX.

NuttX is a very versatile operating system with many (optional) features that supports a wide range of microcontroller platforms. This includes support for NXP's S32K1xx and i.MX RT 10xx, as well as many MCUs from the Kinetis and LPC families.

NuttX is licensed under the permissive Apache License 2.0. This allows it to be integrated into other projects without the need to distribute the derivative work under the same license. Parts of the codebase may still be licensed under the BSD 3-clause license that was used previously, but this should not pose any limitations.

hashtag
NuttX support for UCANS32K146

A board configuration for RDDRONE-UCANS32K146 is available in the upstream Apache NuttX repositories. As of September 2020, the following features are confirmed to be available:

  • Basic support for the NXP S32K1xx family (ARM Cortex-M0+ and M4F)

  • SPI, I2C and UART are enabled and can be used in your own drivers and applications

  • PWM output using the FlexTimer peripheral is available as well

There is currently no driver support in NuttX for the NXP EdgeLock SE050 secure element.

hashtag
PX4, NuttX or bare-metal?

is build on top of NuttX, so most of the features that are available in NuttX are also available if you choose to . PX4 uses most interfaces that NuttX provides, but adds additional abstractions and in some cases it bypasses the NuttX interfaces and implements its own API. So there's some differences, but you still get most of the features of NuttX, as well as PX4's , their , as well as many .

However, if you do not plan on using any of the PX4 features and do not need to interface with any other PX4-enabled system, you can also use the UCANS32K146 development board with "just" NuttX. This makes it easier to to your liking without having to worry about breaking the PX4 stack.

There is also a third option. NXP offers a "bare-metal" SDK for the S32K1xx family, and . That means you can use the UCANS32K146 board with UAVCAN, but without any operating system or software stack. Or you can integrate it with other software.

hashtag
Documentation and getting help

Documentation for NuttX is available on their website:

Their online documentation is not exactly beginner friendly. A few volunteers have stepped forward to help improve the available documentation, but there is still some work to be done. Luckily, the code base is pretty clean and self explanatory (and often well documented within the code itself). With a few pointers in the right direction and some patience you can get pretty far on your own.

The community page on the official Apache NuttX website lists a few ways to ask questions, report issues and get in contact with the main developers:

About PX4 Autopilot

PX4 is an open source flight control software for drones and other unmanned vehicles.

hashtag
What is PX4 Autopilot?

PX4 is an open source flight control software for drones and other unmanned vehicles. The project provides a flexible set of tools for drone developers to share technologies to create tailored solutions for drone applications. PX4 provides a standard to deliver drone hardware support and software stack, allowing an ecosystem to build and maintain hardware and software in a scalable way.

PX4 is part of Dronecodearrow-up-right, a non-profit organization administered by Linux Foundation to foster the use of open source software on flying vehicles. Dronecode also hosts QGroundControl, MAVLink & the SDK. --

circle-check

PX4 Autopilot for UCANS32K146 is build on top of NuttX. Therefore, most of the information in the "" section also applies to PX4! Besides flight control and autopilot software, it also contains additional tools, drivers and middleware.

hashtag
Why use PX4 Autopilot on UCANS32K146?

The UCAN board is not an Autopilot, so why consider using PX4 on it? There are a number of reasons for this:

  • Building a PX4 distributed architecture. The same peripheral drivers running on an FMU can be reused here on the UCAN board, with only the CAN bus (UAVCAN) separating them. This means a common codebase is developed and used for something like a sensor or actuator.

  • PX4 carefully maintains and updates their branch of NuttX, and regularly backports to mainstream NuttX. This means PX4/Nuttx is more stable and there are minimal "surprises" due to untested code making it's way into the OS.

hashtag
PX4 support for UCANS32K146

The PX4 development team provides basic support for UCANS32K146. A board configuration is available from which . Because PX4 is build on top of NuttX, it supports most of the for UCANS32K146.

There are some additional features offered by PX4:

  • PWM generation

  • Most PX4 drivers and modules can be enabled

There is currently no driver support in PX4 or NuttX for the NXP EdgeLock SE050 secure element.

hashtag
Documentation and getting help

Documentation for PX4 is available on their website:

PX4 Autopilot is originally a drone flight control stack, therefore most of the documentation is focused on using PX4 on flight management units. Not all features may be directly available on UCANS32K146, though you can potentially enable all modules in the source code.

Issues can be reported on the . There are various available where you can ask questions and discuss your ideas.

Model Based Design ToolBox for UCANS32K1SIC

hashtag
Model Based Design Toolbox

In addition to traditional software tools, we pleased to now also have support for the UCANS32K1SIC board in the MBDT. From the NXP MBDT website pagearrow-up-right: "The NXP MBDT includes an integrated Simulink®-embedded target supporting NXP MCUs for direct rapid prototyping and built-in support for software- and processor-in-the-loop (SIL and PIL) development workflows, systems and peripherals device interface blocks and drivers, a target-optimized Math and Motor Control library set (AMMCLib) for efficient execution on the target automotive MCUs and Real-Time Control Embedded Software Motor Control and Power Conversion Libraries (RTCESL) for other MCUs, and bit-accurate simulation results in the Simulink® simulation environment."

hashtag
Example:

This article shows how to develop an application for the UCANS32K1SIC evaluation board in MATLAB and Simulink and NXP’s Model-Based Design Toolbox.

hashtag
Other links:

Available software

UCANS32K146 software enablement

hashtag
Introduction

There is a variety of software that can run on the UCAN boards. This includes NXP bare metal code and examples. New is the ability to use NXP MBDT (Model Based Design toolbox) The Mobile Robotics team has also enabled community supported ROS and autopilot ports for several opensource projects listed below. Typically we use NuttX/PX4 - which is the curated version of NuttX with the PX4 Autopilot tools. While the UCAN board is NOT an autopilot, with this buid, it can be a peripheral to PX4 and even offer distrubuted computing capability. The CAN communication on the UCAN board will mirror the current capabilty and state of CAN on PX4

circle-check

See the software sections below in this gitbook for more details on these options!

hashtag
Model Based Design Toolbox

From the NXP website: "The NXP MBDT includes an integrated Simulink®-embedded target supporting NXP MCUs for direct rapid prototyping and built-in support for software- and processor-in-the-loop (SIL and PIL) development workflows, systems and peripherals device interface blocks and drivers, a target-optimized Math and Motor Control library set (AMMCLib) for efficient execution on the target automotive MCUs and Real-Time Control Embedded Software Motor Control and Power Conversion Libraries (RTCESL) for other MCUs, and bit-accurate simulation results in the Simulink® simulation environment."

Specific information on using the UCANS32K1SIC with MBDT is given here in this article:

hashtag

UCANS32K146 is a build target for PX4 Autopilot. PX4 is an open source flight control software for drones and other unmanned vehicles. While UCANS32K146 is not a flight controller, it can leverage the PX4 infrastructure to provide communications and portability of peripheral drivers, leading to enablement of a distributed vehicle architecture. For example drivers for secure element SE050 would be identical on the FMU and CAN nodes. PX4 makes use of a managed and maintained version of NuttX RTOS.

hashtag

In addition to PX4, UCANS32K146 is also a build target in Apache NuttX and can therefore be used without PX4 infrastructure if not needed.

hashtag

UAVCAN is a lightweight protocol designed for reliable intravehicular communication in aerospace and robotic applications over CAN bus, ethernet, and other robust transports. The name UAVCAN stands for Uncomplicated Application-level Vehicular Communication And Networking. It is created to address the challenge of deterministic on-board data exchange between systems and components of next-generation intelligent vehicles: manned and unmanned aircraft, spacecraft, robots, and cars.

hashtag

CAN driver compatible with SocketCAN API, takes benefit of POSIX socket API for painless and portable CAN application development.

hashtag

This software interface supports debugging UAVCAN and CAN on PC reusing an UCANS32K board reprogrammed as a debugger.

Getting started

hashtag
UCANS32K146 overview

RDDRONE-UCANS32K146 front view
RDDRONE-UCANS32K146 back view

hashtag
Powering the board

There are two options when powering the UCANS32K146. The first option is to connect 5V power to the power pins on the board. The second option is to power the board through one of the JST-GH CAN connectors. The middle two pins on the CAN connector are for CAN data, and the outer two are for power. The left-most pin is for 5V, and the right-most pin is for GND.

hashtag
Flashing and debugging

For flashing firmware and interfacing with the serial console, a 7-pin JST-GH connector with SWD and UART interfaces is present on the board. It is located on the side of the board next to the CAN connectors.

Guides for flashing binaries to UCANS32K146 are available for and Apache NuttX.

DEMO: UAVCAN node servo pwm control

How to send PWM signal using CAN bus

The idea is to control a servo motor or ESC via the CAN board using the UAVCAN protocol. This is useful to decentralize the processing from the FMU to multiple CAN boards in case of having multiple PWM units.

Next, we will show how to connect a CAN board to the Ubuntu 22.04 PC and send PWM commands.

hashtag
Hardware setup

  • (1) UCANS32K1SIC board

  • (3) USB-TTL-3V3: the GND black wire should be mounted at the top when the serial debug connector is on the left.

  • (2) Adapter board

  • (4) CAN to USB adapter board

  • (5) debug cable: to be able to communicate with the board via nutshell cmdline.

  • (6) CAN cable: mount the CAN cable at the top right connector.

  • (7) A resistor board: mount this board below the CAN cable connector

  • (8) Power supply: make sure to not exceed 5 Volts

  • (9) Servo motor for testing

hashtag
Software setup

Install drone_can_gui tool:

hashtag
Usage

  • Set up can interface

Open a terminal and type these two lines

  • Verify can interface

Check whether can0 interface figures in network interfaces list:

Double check by dumping CAN bus traffic

  • Verify pwm status

In a nutshell, check the status of PWM in your board

  • Start drone gui tool

Press ok

You should see your ucans32 device in the list of nodes:

  • Arm the vehicle

Arm the vehicle (using QGC or RC transmitter depending on your setup):

hashtag
External links:

[1]

[2]

Differences between UCANS32K146-01 and UCANS32K1SIC, UCANS32K146B

Outline the differences in the two versions of the board

Changes as follows:

Type name

CANPHY

PWM

Other

UCANS32K146-01

TJA1044 8 pin

(Mantis 2017)

1

UCANS32K146B

DEMO: APA102 RGB LED control via UCANS32K146 with PX4-Autopilot

hashtag
Introduction

This tutorial explains how to operate 3-LED APA102 RGB board via UCANS32K146 over SPI.

hashtag
Items Needed

  • An APA102 based RGB LED board

  • UCANS32K146 or UCANS32K1SIC

  • Jumper wires

hashtag
APA102 LED Board

hashtag
Connections

The input connector of 3-LED APA102 board has 4 wired connections: SDI, CKI, PWR, GND. To connect the LED board to the UCAN board, refer the configuration of 'stemma qt / qwiic jst sh cable'. The connections would be as follows:

3-LED APA102 Board Input
Name
SPI Port (P1) Pin Number on UCAN

hashtag

hashtag
Network

All the LEDs in the board are daisy chained together. Note: These boards can also be daisy chained from one board to the next. From the software point of view these are just considered one long string of LEDs daisy chained together.

hashtag
Software Procedure

Note: You may refer the steps for building and flashing PX4 on this gitbook .

hashtag
Software Setup

Change the value of 'NUM_LEDS' in '/platforms/nuttx/NuttX/apps/examples/apa102/apa102_main.c' to the number of LEDs in your APA102 board. For our case, it will be '3'.

hashtag
Building PX4

After compilation is done, the new firmware is available under: build/nxp_ucans32k146_default/deploy/34.bin

hashtag
Flashing PX4

Flash the firmware and bootloader, if the board already doesn't have one, using 'jlink.exe'.

circle-info

You may flash the attached files (configured for a 3-LED APA102 board), to skip the above steps.

hashtag
Operating the LEDs

Connect your board and access to the terminal using MobaXterm, minicom,...

Type the following command:

Schematics and designs

Schematics of UCANS32K146 prototype and production version

hashtag
Production Schematics UCANS32K146-01

Production Version 01 Schematics

Schematics for the production version UCANS32K146 are published on NXP.com at the link below under <Documents and Software><Design Resources><Design tools and Files>:

hashtag
Prototype Schematics UCANS32K146

Prototype pre-release hardware schematics, board layout and bill-of-materials.

circle-exclamation

Note that these files are for the prototype version of the board. These are included here only for convenience to the small number of developers that may have this prototype board.

S32K1 SDK with libuavcan

hashtag
S32 Design Studio and S32K1 SDK

hashtag
Application Note AN12842

circle-info

It might take a while for the embedded PDF file to load.

Download NuttX

How to download (clone) the NuttX source code using Git.

hashtag
Repositories

NuttX consists of two repositories. The main operating system and an additional set of applications. Both repositories need to be in the same parent folder, with the main operating system being in a folder named "nuttx" and the applications have to be in a folder named "apps".

  • NuttX -

  • Apps -

Let's start by creating a parent folder to store both repositories. The following command will create an "apache-nuttx" folder if it doesn't exist already and makes it the active working directory.

We can now clone the Git repository that contains the main operating system. We'll immediately name the folder "nuttx" because the build system might get lost if it has a different name.

Similarly, we'll clone the apps repository:

You should now have a "apache-nuttx" folder located at ~/src/ that contains two folders: "nuttx" and "apps". That's all you need.

hashtag
Checkout a stable release

By default Git will checkout the latest commit in the master branch when you clone the repositories. This is the latest development version at that point in time. Keep in mind that if you want to keep up with any changes you should use git pull to pull in any new commits. Keep in mind to do this for both the "nuttx" and the "apps" repositories.

You can also checkout the latest stable release. Change your working directory to the first repository, and fetch the available tags.

Now that the tags are available locally, you can checkout a particular release. At the time of writing the latest stable release is NuttX 9.1.0. You can checkout this particular version with the following command:

Don't forget to do both steps for both repositories! A particular version of the NuttX OS always should be matched by the same version of the NuttX Apps.

Building and flashing NuttX

hashtag
Toolchain

The online NuttX documentation provides an overview of possible development environmentsarrow-up-right, but the README file in the main NuttX repositoryarrow-up-right is also a good starting point. In general you're good to go if you are using Linux with a standard GNU toolchain.

Within the NXP Mobile Robotics team we often use PX4 Autopilot as well. They have their own toolchain preferences (which are compatible with NuttX), so we often install their preferred toolchain. This is also easy to do because they provide some scripts that take care of most of the work.

hashtag
Building NuttX

Building NuttX is very easy when you have all required tools installed. You just have to select a canned configuration, change the configuration to your liking and just run make. If you want to throw away the current configuration and select another configuration you first have to run make distclean. That's all.

hashtag
Flashing NuttX

Download and install the . It is available for all major operating systems, but we will assume here that you are using a Linux-based OS. Open a terminal and navigate to the main nuttx directory, which contains nuttx.bin after a successful build. Then you can start the J-Link tools by entering:

Make sure that the debugger is plugged into both the UCANS32K146 board and your computer. If you are using a virtual machine, the debugger USB device should be made available inside the VM. Also do not forget to power the board. Now enter:

You are now asked to specify a device. It is quickest to manually enter the device:

The target interface needs to be specified, which is SWD:

Finally you have to specify the target interface speed. It is recommended to use 1000 kHz:

Now flash the binary with:

The binary will be programmed and this process will also be verified. It should then mention if everything went OK. You can quit the J-Link tools with:

You may need to power cycle the device afterwards. The debug console should now be available on LPUART1 (115200 baud) - which is also accessible on the debugger breakout board.

NuttX configuration

NuttX offers a wide range of configuration options and features that can be enabled with one of the available Kconfig frontends.

hashtag
Install Kconfig frontends

NuttX uses a similar configuration system as the Linux kernel. There are Kconfig files that define the different options and you can generate a configuration file that can be used by the build system with a Kconfig frontend.

NuttX provide their own fork/back-up of the Kconfig-frontends, to make sure that they always have access to a compatible version. It is still hosted on their old BitBucket repository.

circle-check

In Ubuntu 20.04 it is possible to directly install the kconfig-frontends package from the package repositories. You only need to run apt install kconfig-frontends.

You can then skip most of the instructions below.

First, make sure you have gperf installed:

Then download the source code by cloning the NuttX Tools repository from BitBucket:

Change the working directory to the kconfig-frontends folder:

Configure the build to include (at least) the menuconfig and qconfig tools. The Kconfig frontends will be installed into the /usr folder.

Now build the tools according to the configuration that we just created:

And finally install the Kconfig-frontends that we just build from source:

Once you have a "default" configuration in place (we will get to that in a second), you can edit the configuration with make menuconfig or make qconfig. Both tools have their pros and cons, just give them a try and see which one you like the most!

hashtag
Start with a canned configuration

Make sure you are inside the "nuttx" folder:

Then use the configure script to select the "nshdebug" configuration for the "rddrone-uavcan146" board:

Make sure to first run make distclean if you still have another active configuration.

hashtag
Configuration

Menuconfig is the "default" tool to configure the NuttX build. Once you have a board configuration selected (see above) you can edit the configuration with:

You can also use qconfig, which shows the configuration as a nested list instead of different menus. This might make it a bit easier to navigate through the many options that are available:

Menuconfig and qconfig are easy to use tools, but NuttX is very configurable and you can easily got lost in the hundreds of menus and options that it provides. Take your time to explore the options that NuttX has to offer, but don't try to enable many options at once. Just select a few, build the code and give it a try on the hardware itself.

Building and flashing PX4

How to build and flash PX4 Autopilot for NXP UCANS32K146.

hashtag
Prerequisites

You need a build environment that can build PX4 Autopilot. You can generally use the same environment as with Apache NuttX, but you will need to install some additional packages. To get started, you can use the HoverGames virtual machinearrow-up-right, or install your own Linux (virtual) machine. When you have a basic Linux environment, you only need to install the PX4 toolchainarrow-up-right to continue.

More information is also available in the PX4 Developer Guidearrow-up-right.

If you have not yet cloned the PX4 source code as part of the toolchain installation, you should do so now:

hashtag
Adding CAN utilities to PX4

If you want to add the can-utils apps to PX4 (candump and cansend applications), you will need to perform an extra step.

Here are the steps:

  1. From the root of your PX4 directory, run make nxp_ucans32k146 menuconfig

  2. Navigate to Application Configuration --->

  3. Navigate to CAN Utilities --->

It should look like this:

Once you've finished this, exit the menuconfig and save, then continue to build PX4 below.

hashtag
Building PX4 Autopilot for UCANS32K146

Change your working directory (cd command) to the PX4-Autopilot Git repository that you just cloned. Next we will build the bootloader and firmware for our UCAN board.

hashtag
Bootloader

circle-info

You only need to build and flash the bootloader once. If you rebuild/reflash PX4, you can skip all of the bootloader steps.

hashtag
Downloading the Bootloader

If you don't want to build the bootloader, you can download it by clicking the file below.

Alternatively, run the following command to build the bootloader:

The binary file will be located at PX4-Autopilot/build/nxp_ucans32k146_canbootloader/nxp_ucans32k146.bin. Keep this file handy for flashing later.

hashtag
PX4 Firmware

A prebuilt version of PX4 for UCANS32K146 is linked below. This is the latest build of PX4 master.

Alternatively, you can build the firmware by running the following command in the root of the PX4-Autopilot repository:

The .bin file for flashing the firmware will be stored in build/nxp_ucans32k146_default/deploy. The file you're looking for is 34.bin. You can leave the file there or copy it to another location for flashing the board in the next section.

hashtag
Flashing PX4 Autopilot to the UCANS32K146 board

Download and install the . It is available for all major operating systems, but we will assume here that you are using a Linux-based OS. Open a terminal and navigate to the directory which holds the nxp_ucans32k146.bin file that we build in the previous step.

Now start the J-Link tools by entering:

Make sure that the debugger is plugged into both the UCANS32K146 board and your computer. If you are using a virtual machine, the debugger USB device should be made available inside the VM. Also do not forget to power the board. Now enter:

You are now asked to specify a device. It is quickest to manually enter the device:

The target interface needs to be specified, which is SWD:

Finally you have to specify the target interface speed. It is recommended to use 1000 kHz:

Now flash the bootloader with:

The binary will be programmed and this process will also be verified. It should then mention if everything went OK.

Next, flash the PX4 firmware binary with:

And you're good to go.

You can quit the J-Link tools with:

You may need to power cycle the device afterwards. The debug console should now be available on LPUART1 (115200 baud) - which is also accessible on the debugger breakout board.

hashtag
More information

The PX4-build for UCANS32K146 is in an early state and not all features may be available. More information about PX4 Autopilot is available in their and . Their software development is managed on . There are also various available.

TJA1443 HVSON14

(Avery 2020)

2

UCANS32K1SIC

TJA1463 HVSON14

(Signal improvement 2020)

2

PX4 Autopilotarrow-up-right
run PX4 on the UCANS32K146
uORB publish/subscribe messaging APIarrow-up-right
parameter systemarrow-up-right
drivers for sensors and actuatorsarrow-up-right
customize the configuration and enable features
there is also a bare-metal libUAVCAN implementation available
https://nuttx.apache.org/arrow-up-right
https://nuttx.apache.org/docs/latest/arrow-up-right
https://cwiki.apache.org/confluence/display/NUTTX/Documentationarrow-up-right
https://nuttx.apache.org/community/arrow-up-right

PX4 includes and tests additional tools and methods within their distribution. i.e 'top'

  • Connection with the PX4.io community ecosystem through slack, discourse and regular standards bodies meetings.

  • PX4 websitearrow-up-right
    Apache NuttX
    a binary can easily be build
    features that were enabled in the NuttX build
    uORB and MAVLink messagingarrow-up-right
    https://px4.io/arrow-up-right
    https://docs.px4.io/master/en/arrow-up-right
    https://dev.px4.io/master/en/arrow-up-right
    PX4 GitHubarrow-up-right
    support channelsarrow-up-right
    UCANS32K1SIC EVB Application Development using Model-Based Design Toolboxarrow-up-right
    https://community.nxp.com/t5/Model-Based-Design-Toolbox-MBDT/ct-p/mbdtarrow-up-right
    GitHub pull requestarrow-up-right
    https://github.com/DroneCAN/gui_toolarrow-up-right
    dronecan_gui_tool startup
    dronecan_gui_tool
    dronecan_gui_tool
    STEMMA QT / Qwiic JST SH 4-pin Cable
  • Segger J-Link debugger

  • GND

    7

    Red

    PWR (5V)

    1

    Yellow

    CLK

    2

    Blue

    MOSI

    4

    link
    file-download
    22KB
    nxp_ucans32k146_canbootloader.bin
    arrow-up-right-from-squareOpen
    PX4-Autopilot Bootloader
    file-download
    582KB
    34.bin
    arrow-up-right-from-squareOpen
    PX4-Autopilot Firmware

    Black

    https://github.com/apache/incubator-nuttxarrow-up-right
    https://github.com/apache/incubator-nuttx-appsarrow-up-right
    J-Link Software and Documentation Packarrow-up-right
    sudo apt-get install -y python3-pip python3-setuptools python3-wheel 
    sudo apt-get install -y python3-numpy python3-pyqt5 python3-pyqt5.qtsvg git-core 
    sudo pip3 install git+https://github.com/DroneCAN/gui_tool@master 
    sudo ip link set can0 type can bitrate 1000000 
    sudo ip link set up can0
    ifconfig  
    candump can0 
    pwm_out status 
    dronecan_gui_tool 
    git clone -b UCANS32K146 https://github.com/NXPHoverGames/PX4-Autopilot.git --recursive
    cd PX4-Autopilot
    make nxp_ucans32k146_canbootloader
      // output: build/nxp_ucans32k146_canbootloader/nxp_ucans32k146_canbootloader.bin
    make nxp_ucans32k146
      // output: build/nxp_ucans32k146_default/deploy/34.bin
    connect
    // specify the following:
      // device: s32k146;
      // target interface: s (which stands for swd);
      // interface speed: 1000 khz (recommended);
    loadbin <path to nxp_ucans32k146.bin> 0x0
    loadbin <path to 34.bin> 0x6000
    // quit jlink tools by typing 'q'.
    apa102
    mkdir -p ~/src/apache-nuttx && cd ~/src/apache-nuttx
    git clone https://github.com/apache/incubator-nuttx.git nuttx
    git clone https://github.com/apache/incubator-nuttx-apps.git apps
    git fetch && git fetch --tags
    git checkout nuttx-9.1.0
    JLinkExe
    connect
    s32k146
    s
    1000
    loadbin nuttx.bin 0
    q
    sudo apt install gperf
    git clone https://bitbucket.org/nuttx/tools.git
    cd tools/kconfig-frontends
    ./configure --enable-mconf --enable-qconf --prefix=/usr
    make
    sudo make install
    cd ~/src/apache-nuttx/nuttx
    ./tools/configure.sh rddrone-uavcan146:nshdebug
    make menuconfig
    make qconfig
    UCANS32K1SIC (a single UCANS32K146 board, CAN cable and termination network board)
  • KIT-UCANS32K146arrow-up-right (complete development kit with two UCANS32K146 boards, a debugger and an adapter board - everything you need to get started!)

  • UCANS32K146-01arrow-up-right (a single UCANS32K146 board, without additional debugger)

  • Battery management systems (also have a look at our BMS772 reference designarrow-up-right!)

    • Report power consumption, state of charge, battery health and other faults to the FMU

  • GPS

    • Allows for more than one GPS to be connected to the FMU by communicating GPS info over CAN

  • Sensors

    • Airspeed/pressure sensors can report information to the FMU over CAN

  • And many more

    • Remote lights, arming/safety switches, and really any other peripheral which needs to communicate with the FMU can be connected to the UCANS32K146 development board.

  • NXP EdgeLock SE050 secure elementarrow-up-right with NFC interface (with external antenna, not included)

  • One (UCANK1S32K146) or Two (UCANS32KSIC) RC-PWM pin header with optional external power input

  • Through-hole solder pads (for 0.100" pin headers) that expose SPI, I2C and UART. Can also be remapped to other pin functions (GPIO, ADC, timer, ...)

  • 5V power input; the board can be powered from the 4-pin JST-GH CAN connectors or the 2-pin power input header. There is an optional power input for the RC-PWM header as well specifically for 3 pin connected PWM devices such as high power RC servos.

  • UCANS32K1SIC arrow-up-right
    UCANS32K1SCTarrow-up-right
    NXP Mobile Robotics Community arrow-up-right
    thread for questions about UCANS32K148 and UCANS32K1SICarrow-up-right
    UAVCANarrow-up-right
    S32K146 MCUarrow-up-right
    RDDRONE-FMUK66arrow-up-right
    NXP S32K146 Automotive MCUarrow-up-right
    NXP TJA1044 CAN transceiversarrow-up-right
    4-pin JST-GH connectorsarrow-up-right
    available on the NXP websitearrow-up-right
    are available on this GitBook
    on the NXP websitearrow-up-right
    Git repository on GitHubarrow-up-right
    Markdownarrow-up-right
    arrow-up-right
    Creative Commons Attribution 4.0 International Licensearrow-up-right
    Jumper wires

    MOSI

    4

    Orange

    White

    GND

    7

    Black

    Black (original Wire)

    PWR (5V)

    SPI pin 1* or P11 'BEC PWR'

    Red

    Red

    CLK

    2

    Yellow

    Black

    GND

    Red

    Power 5V

    Yellow

    Clock

    Orange

    MOSI (Data)

    SDI = Data_IN APA102 LEDs connect in a daisy chain manner
    ELM-6D0-001 board
    Wires connection to UCAN board

    Black (Added wire)

  • Enable all options except [ ] SocketCAN slcan tool

  • J-Link Software and Documentation Packarrow-up-right
    User Guidearrow-up-right
    Developer Guidearrow-up-right
    GitHubarrow-up-right
    support channelsarrow-up-right
    https://github.com/noxuz/libuavcan_demoarrow-up-right
    UCANS32K1SIC EVB Application Development using Model-Based Design Toolboxarrow-up-right
    PX4 Autopilotarrow-up-right
    More information
    Apache NuttXarrow-up-right
    More information
    UAVCAN V1arrow-up-right
    Bare metal example with libuavcan
    SocketCAN APIarrow-up-right
    More information
    SLCAN - CAN over serialarrow-up-right
    More information
    PX4 Autopilot
    Two options for powering UCANS32K146.
    UCANS32K146 (pre-production) powered through the JST-GH CAN connector
    UCANS32K146 (pre-production) connected to a debugger breakout boards.
    file-pdf
    549KB
    20191104_SCH_LID2438_final.pdf
    PDF
    arrow-up-right-from-squareOpen
    UCANS32K146 Schematics November 2019
    file-pdf
    5MB
    20191105_SCH_BOM_PCB3D.PDF
    PDF
    arrow-up-right-from-squareOpen
    UCANS32K146 SCH, PCB & BOM November 2019
    The file is also available on NXP.com.arrow-up-right
    sudo apt-get update 
    sudo apt-get dist-upgrade 
    sudo apt-get install can-utils 
    pip install python-can 
    pkill python3 
    sudo ip link set can1 down 
    sudo ip link set can0 down 
    sudo ip link set can0 up type can bitrate 1000000 loopback off restart-ms 100 
    sudo ip link set can1 up type can bitrate 1000000 dbitrate 4000000 loopback off fd on fd-non-iso off restart-ms 100 
    mkdir -p ~/git/ros2/src 
    cd ~/git/ros2/src 
    git clone git@github.com:rudislabs/ros2_orchestrator.git 
    colcon build --symlink-install 
    sudo echo "source /home/$USER/git/ros2/install/setup.bash" >> ~/.bashrc
    source ~/.bashrc 
    ros2 launch ros2_orchestrator orchestrate.launch.py 
    ros2 launch ros2_orchestrator orchestrate.launch.py 
    ros2 run joy joy_node 
    git clone https://github.com/PX4/PX4-Autopilot
    make nxp_ucans32k146_canbootloader
    make nxp_ucans32k146
    JLinkExe
    connect
    s32k146
    s
    1000
    loadbin /path/to/nxp_ucans32k146.bin 0x0
    # If using pre-built binary
    loadbin /path/to/34-0.1.{commit}.uavcan.bin 0x6000
    # If using self-built binary
    loadbin /path/to/34.bin 0x6000
    q
    Creative Commons License
    El Mandadero project
    http://ci.px4.io/job/PX4_misc/job/Firmware-compile/job/master/lastSuccessfulBuild/artifact/build/nxp_ucans32k146_default/nxp_ucans32k146.binci.px4.iochevron-right
    UCANS32K146 PX4 Bootloader (Latest build)
    http://ci.px4.io/job/PX4_misc/job/Firmware-compile/job/master/lastSuccessfulBuild/artifact/build/nxp_ucans32k146_default/34-0.1.*.uavcan.bin/*zip*/nxp_ucans32k146_default.zipci.px4.iochevron-right
    UAVCAN PX4 firmware binary (Latest build)
    S32 Design Studio IDE for Arm<sup>®</sup> based MCUsNXPchevron-right
    S32 Design Studio IDE for Arm<sup>®</sup> based MCUsNXPchevron-right
    NavQPlus
    NXP Cup
    Logo
    Logo
    S32K146 UAVCAN V1 and MAVCAN Development SystemNXPchevron-right
    HoverGames
    Logo
    MR-CANHUBK344