mirror of
https://github.com/apache/nuttx.git
synced 2026-06-06 00:14:22 +08:00
SAMV71-XULT: Add support for MCAN1 loopback test
This commit is contained in:
@@ -20,6 +20,7 @@ Contents
|
|||||||
- Networking
|
- Networking
|
||||||
- Audio Interface
|
- Audio Interface
|
||||||
- maXTouch Xplained Pro
|
- maXTouch Xplained Pro
|
||||||
|
- MCAN1 Loopback Test
|
||||||
- Debugging
|
- Debugging
|
||||||
- Configurations
|
- Configurations
|
||||||
|
|
||||||
@@ -951,8 +952,8 @@ MXT Configuration Options
|
|||||||
ILI9488 Configuration Options
|
ILI9488 Configuration Options
|
||||||
-----------------------------
|
-----------------------------
|
||||||
|
|
||||||
Currently only the parallel mode is supported. This means that the LCD can
|
Currently only the parallel mode is supported. This means that the LCD can
|
||||||
only be used in connected in the LCD (EXT4) connection.
|
only be used in connected in the LCD (EXT4) connection.
|
||||||
|
|
||||||
System Type -> SAMV7 Peripheral Support
|
System Type -> SAMV7 Peripheral Support
|
||||||
CONFIG_SAMV7_SMC=y : Needed by the ILI9466 driver controller
|
CONFIG_SAMV7_SMC=y : Needed by the ILI9466 driver controller
|
||||||
@@ -990,27 +991,94 @@ only be used in connected in the LCD (EXT4) connection.
|
|||||||
CONFIG_EXAMPLES_NXLINES_VPLANE=0
|
CONFIG_EXAMPLES_NXLINES_VPLANE=0
|
||||||
CONFIG_EXAMPLES_NXLINES_DEVNO=0
|
CONFIG_EXAMPLES_NXLINES_DEVNO=0
|
||||||
|
|
||||||
|
MCAN1 Loopback Test
|
||||||
|
===================
|
||||||
|
|
||||||
|
MCAN1
|
||||||
|
-----
|
||||||
|
SAM V71 Xplained Ultra has two MCAN modules that performs communication according
|
||||||
|
to ISO11898-1 (Bosch CAN specification 2.0 part A,B) and Bosch CAN FD
|
||||||
|
specification V1.0. MCAN1 is connected to an on-board ATA6561 CAN physical-layer
|
||||||
|
transceiver.
|
||||||
|
|
||||||
|
------- -------- -------- -------------
|
||||||
|
SAM V71 FUNCTION ATA6561 SHARED
|
||||||
|
PIN FUNCTION FUNCTIONALITY
|
||||||
|
------- -------- -------- -------------
|
||||||
|
PC14 CANTX1 TXD Shield
|
||||||
|
PC12 CANRX1 RXD Shield
|
||||||
|
------- -------- -------- -------------
|
||||||
|
|
||||||
|
Enabling MCAN1
|
||||||
|
--------------
|
||||||
|
These modifications may be applied to the samv71-xult/nsh configuration in order
|
||||||
|
to enable MCAN1:
|
||||||
|
|
||||||
|
Device Drivers -> CAN Driver support
|
||||||
|
CONFIG_CAN=y # Enable the upper-half CAN driver
|
||||||
|
CONFIG_CAN_FIFOSIZE=8
|
||||||
|
CONFIG_CAN_NPENDINGRTR=4
|
||||||
|
|
||||||
|
System Type -> SAMV7 Peripheral Selections
|
||||||
|
CONFIG_SAMV7_MCAN1=y # Enable MCAN1 as the lower-half
|
||||||
|
|
||||||
|
System Type ->MCAN device driver options
|
||||||
|
CONFIG_SAMV7_MCAN_CLKSRC_MAIN=y # Use the MAIN clock as the source
|
||||||
|
CONFIG_SAMV7_MCAN_CLKSRC_PRESCALER=1
|
||||||
|
|
||||||
|
System Type ->MCAN device driver options -> MCAN1 device driver options
|
||||||
|
CONFIG_SAMV7_MCAN1_ISO11899_1=y # Loopback test only support ISO11899-1
|
||||||
|
CONFIG_SAMV7_MCAN1_LOOPBACK=y # Needed for loopback test
|
||||||
|
CONFIG_SAMV7_MCAN1_BITRATE=500000 # Not critical for loopback test
|
||||||
|
CONFIG_SAMV7_MCAN1_PROPSEG=2 # Bit timing setup
|
||||||
|
CONFIG_SAMV7_MCAN1_PHASESEG1=11 # " " " " " "
|
||||||
|
CONFIG_SAMV7_MCAN1_PHASESEG2=11 # " " " " " "
|
||||||
|
CONFIG_SAMV7_MCAN1_FSJW=4 # " " " " " "
|
||||||
|
CONFIG_SAMV7_MCAN1_FBITRATE=2000000 # CAN_FD BTW mode is not used
|
||||||
|
CONFIG_SAMV7_MCAN1_FPROPSEG=2 # " " " " " " "" " " " "
|
||||||
|
CONFIG_SAMV7_MCAN1_FPHASESEG1=4 # " " " " " " "" " " " "
|
||||||
|
CONFIG_SAMV7_MCAN1_FPHASESEG2=4 # " " " " " " "" " " " "
|
||||||
|
CONFIG_SAMV7_MCAN1_FFSJW=2 # " " " " " " "" " " " "
|
||||||
|
CONFIG_SAMV7_MCAN1_NSTDFILTERS=0 # Filters are not used in the loopback test
|
||||||
|
CONFIG_SAMV7_MCAN1_NEXTFILTERS=0 # " " " " " " " " "" " " " " " "
|
||||||
|
CONFIG_SAMV7_MCAN1_RXFIFO0_32BYTES=y # Each RX FIFO0 element is 32 bytes
|
||||||
|
CONFIG_SAMV7_MCAN1_RXFIFO0_SIZE=8 # There are 8 queue elements
|
||||||
|
CONFIG_SAMV7_MCAN1_RXFIFO0_32BYTES=y # Each RX FIFO1 element is 32 bytes
|
||||||
|
CONFIG_SAMV7_MCAN1_RXFIFO0_SIZE=8 # There are 8 queue elements
|
||||||
|
CONFIG_SAMV7_MCAN1_RXBUFFER_32BYTES=y # Each RX BUFFER is 32 bytes
|
||||||
|
CONFIG_SAMV7_MCAN1_TXBUFFER_32BYTES=y # Each TX BUFFER is 32 bytes
|
||||||
|
CONFIG_SAMV7_MCAN1_TXFIFOQ_SIZE=8 # There are 8 queue elements
|
||||||
|
CONFIG_SAMV7_MCAN1_TXEVENTFIFO_SIZE=0 # The event FIFO is not used
|
||||||
|
|
||||||
|
Enabling the CAN Loopback Test
|
||||||
|
------------------------------
|
||||||
|
Application Configuration -> Examples -> CAN Example
|
||||||
|
CONFIG_EXAMPLES_CAN=y # Enables the CAN test
|
||||||
|
|
||||||
|
Enabling CAN Debug Output
|
||||||
|
-------------------------
|
||||||
|
|
||||||
Debugging
|
Debugging
|
||||||
=========
|
=========
|
||||||
|
|
||||||
The on-board EDBG appears to work only with Atmel Studio. You can however,
|
The on-board EDBG appears to work only with Atmel Studio. You can however,
|
||||||
simply connect a SAM-ICE or J-Link to the JTAG/SWD connector on the board
|
simply connect a SAM-ICE or J-Link to the JTAG/SWD connector on the board
|
||||||
and that works great. The only tricky thing is getting the correct
|
and that works great. The only tricky thing is getting the correct
|
||||||
orientation of the JTAG connection.
|
orientation of the JTAG connection.
|
||||||
|
|
||||||
I have been using Atmel Studio to write code to flash then I use the Segger
|
I have been using Atmel Studio to write code to flash then I use the Segger
|
||||||
J-Link GDB server to debug. I have been using the 'Device Programming' I
|
J-Link GDB server to debug. I have been using the 'Device Programming' I
|
||||||
available under the Atmel Studio 'Tool' menu. I have to disconnect the
|
available under the Atmel Studio 'Tool' menu. I have to disconnect the
|
||||||
SAM-ICE while programming with the EDBG. I am sure that you could come up
|
SAM-ICE while programming with the EDBG. I am sure that you could come up
|
||||||
with a GDB server-only solution if you wanted.
|
with a GDB server-only solution if you wanted.
|
||||||
|
|
||||||
I run GDB like this from the directory containing the NuttX ELF file:
|
I run GDB like this from the directory containing the NuttX ELF file:
|
||||||
|
|
||||||
arm-none-eabi-gdb
|
arm-none-eabi-gdb
|
||||||
(gdb) target remote localhost:2331
|
(gdb) target remote localhost:2331
|
||||||
(gdb) mon reset
|
(gdb) mon reset
|
||||||
(gdb) file nuttx
|
(gdb) file nuttx
|
||||||
(gdb) ... start debugging ...
|
(gdb) ... start debugging ...
|
||||||
|
|
||||||
Configurations
|
Configurations
|
||||||
==============
|
==============
|
||||||
|
|||||||
@@ -503,6 +503,25 @@
|
|||||||
# endif
|
# endif
|
||||||
#endif /* CONFIG_SAMV71XULT_MXTXPLND */
|
#endif /* CONFIG_SAMV71XULT_MXTXPLND */
|
||||||
|
|
||||||
|
/* MCAN1
|
||||||
|
*
|
||||||
|
* SAM V71 Xplained Ultra has two MCAN modules that performs communication according
|
||||||
|
* to ISO11898-1 (Bosch CAN specification 2.0 part A,B) and Bosch CAN FD
|
||||||
|
* specification V1.0. MCAN1 is connected to an on-board ATA6561 CAN physical-layer
|
||||||
|
* transceiver.
|
||||||
|
*
|
||||||
|
* ------- -------- -------- -------------
|
||||||
|
* SAM V71 FUNCTION ATA6561 SHARED
|
||||||
|
* PIN FUNCTION FUNCTIONALITY
|
||||||
|
* ------- -------- -------- -------------
|
||||||
|
* PC14 CANTX1 TXD Shield
|
||||||
|
* PC12 CANRX1 RXD Shield
|
||||||
|
* ------- -------- -------- -------------
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define GPIO_MCAN1_TX GPIO_MCAN1_TX_2
|
||||||
|
#define GPIO_MCAN1_RX GPIO_MCAN1_RX_2
|
||||||
|
|
||||||
/************************************************************************************
|
/************************************************************************************
|
||||||
* Public Types
|
* Public Types
|
||||||
************************************************************************************/
|
************************************************************************************/
|
||||||
|
|||||||
@@ -90,6 +90,10 @@ ifeq ($(CONFIG_USBMSC),y)
|
|||||||
CSRCS += sam_usbmsc.c
|
CSRCS += sam_usbmsc.c
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(CONFIG_SAMV7_MCAN),y)
|
||||||
|
CSRCS += sam_mcan.c
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq ($(CONFIG_AUDIO_WM8904),y)
|
ifeq ($(CONFIG_AUDIO_WM8904),y)
|
||||||
ifeq ($(CONFIG_SAMV7_TWIHS0),y)
|
ifeq ($(CONFIG_SAMV7_TWIHS0),y)
|
||||||
ifeq ($(CONFIG_SAMV7_SSC0),y)
|
ifeq ($(CONFIG_SAMV7_SSC0),y)
|
||||||
|
|||||||
@@ -0,0 +1,134 @@
|
|||||||
|
/************************************************************************************
|
||||||
|
* configs/samv71-xultk/src/sam_mcan.c
|
||||||
|
*
|
||||||
|
* Copyright (C) 2015 Gregory Nutt. All rights reserved.
|
||||||
|
* Author: Gregory Nutt <gnutt@nuttx.org>
|
||||||
|
*
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions
|
||||||
|
* are met:
|
||||||
|
*
|
||||||
|
* 1. Redistributions of source code must retain the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer.
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
|
* notice, this list of conditions and the following disclaimer in
|
||||||
|
* the documentation and/or other materials provided with the
|
||||||
|
* distribution.
|
||||||
|
* 3. Neither the name NuttX nor the names of its contributors may be
|
||||||
|
* used to endorse or promote products derived from this software
|
||||||
|
* without specific prior written permission.
|
||||||
|
*
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||||
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||||
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
||||||
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
||||||
|
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
||||||
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
||||||
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
||||||
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
||||||
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||||
|
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
||||||
|
* ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
||||||
|
* POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
*
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Included Files
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
#include <nuttx/config.h>
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <debug.h>
|
||||||
|
|
||||||
|
#include <nuttx/can.h>
|
||||||
|
#include <arch/board/board.h>
|
||||||
|
|
||||||
|
#include "sam_mcan.h"
|
||||||
|
#include "samv71-xult.h"
|
||||||
|
|
||||||
|
#if defined(CONFIG_CAN) && (defined(CONFIG_SAMV7_MCAN0) || defined(CONFIG_SAMV7_MCAN1))
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Pre-processor Definitions
|
||||||
|
************************************************************************************/
|
||||||
|
/* Configuration ********************************************************************/
|
||||||
|
|
||||||
|
#if defined(CONFIG_SAMV7_MCAN0) && defined(CONFIG_SAMV7_MCAN1)
|
||||||
|
# warning "Both MCAN0 and MCAN1 are enabled. Assuming only CAN1."
|
||||||
|
# undef CONFIG_SAMV7_MCAN0
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SAMV7_MCAN0
|
||||||
|
# define CAN_PORT 0
|
||||||
|
#else
|
||||||
|
# define CAN_PORT 1
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Debug ***************************************************************************/
|
||||||
|
/* Non-standard debug that may be enabled just for testing CAN */
|
||||||
|
|
||||||
|
#ifdef CONFIG_DEBUG_CAN
|
||||||
|
# define candbg dbg
|
||||||
|
# define canvdbg vdbg
|
||||||
|
# define canlldbg lldbg
|
||||||
|
# define canllvdbg llvdbg
|
||||||
|
#else
|
||||||
|
# define candbg(x...)
|
||||||
|
# define canvdbg(x...)
|
||||||
|
# define canlldbg(x...)
|
||||||
|
# define canllvdbg(x...)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Public Functions
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
/************************************************************************************
|
||||||
|
* Name: can_devinit
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* All STM32 architectures must provide the following interface to work with
|
||||||
|
* examples/can.
|
||||||
|
*
|
||||||
|
************************************************************************************/
|
||||||
|
|
||||||
|
int can_devinit(void)
|
||||||
|
{
|
||||||
|
static bool initialized = false;
|
||||||
|
struct can_dev_s *can;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* Check if we have already initialized */
|
||||||
|
|
||||||
|
if (!initialized)
|
||||||
|
{
|
||||||
|
/* Call stm32_caninitialize() to get an instance of the CAN interface */
|
||||||
|
|
||||||
|
can = sam_mcan_initialize(CAN_PORT);
|
||||||
|
if (can == NULL)
|
||||||
|
{
|
||||||
|
candbg("ERROR: Failed to get CAN interface\n");
|
||||||
|
return -ENODEV;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Register the CAN driver at "/dev/can0" */
|
||||||
|
|
||||||
|
ret = can_register("/dev/can0", can);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
candbg("ERROR: can_register failed: %d\n", ret);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now we are initialized */
|
||||||
|
|
||||||
|
initialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* CONFIG_CAN && (CONFIG_SAMV7_MCAN0 || CONFIG_SAMV7_MCAN1) */
|
||||||
Reference in New Issue
Block a user