LPC55S16JBD64 CAN is not working

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

LPC55S16JBD64 CAN is not working

Jump to solution
821 Views
aravinth_k
Contributor II

 

Hello Everyone,

I have tested CAN feature in LPCXPRESSO55S16 EVAL board with the (SDK) CAN example , now I'm trying the same example with LPC55S16JBD64 micro controller (custom board ) with modified pin configuration in pin_mux.c file, but I'm not getting any data, I have already raised the issue in zephyr community but this issue is more specific to LPC  micro controller so I'm raising issue here also.

modified pin_mux.c file

/*
 * Copyright 2017-2020 ,2021 NXP
 * All rights reserved.
 *
 * SPDX-License-Identifier: BSD-3-Clause
 */

/***********************************************************************************************************************
 * This file was generated by the MCUXpresso Config Tools. Any manual edits made to this file
 * will be overwritten if the respective MCUXpresso Config Tools is used to update this file.
 **********************************************************************************************************************/

/* clang-format off */
/*
 * TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
!!GlobalInfo
product: Pins v9.0
processor: LPC55S16
package_id: LPC55S16JBD100
mcu_data: ksdk2_0
processor_version: 9.0.0
 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
 */
/* clang-format on */

#include "fsl_common.h"
#include "fsl_iocon.h"
#include "pin_mux.h"

/* FUNCTION ************************************************************************************************************
 *
 * Function Name : BOARD_InitBootPins
 * Description   : Calls initialization functions.
 *
 * END ****************************************************************************************************************/
void BOARD_InitBootPins(void)
{
    BOARD_InitPins();
}

/* clang-format off */
/*
 * TEXT BELOW IS USED AS SETTING FOR TOOLS *************************************
BOARD_InitPins:
- options: {callFromInitBoot: 'true', coreID: cm33_core0, enableClock: 'true'}
- pin_list:
  - {pin_num: '21', peripheral: SWD, signal: SWO, pin_signal: PIO0_10/FC6_SCK/CT_INP10/CTIMER2_MAT0/FC1_TXD_SCL_MISO_WS/SCT0_OUT2/SWO/SECURE_GPIO0_10/ADC0_1, mode: inactive,
    slew_rate: standard, invert: disabled, open_drain: disabled, asw: disabled}
  - {pin_num: '92', peripheral: FLEXCOMM0, signal: RXD_SDA_MOSI_DATA, pin_signal: PIO0_29/FC0_RXD_SDA_MOSI_DATA/CTIMER2_MAT3/SCT0_OUT8/CMP0_OUT/PLU_OUT2/SECURE_GPIO0_29,
    mode: inactive, slew_rate: standard, invert: disabled, open_drain: disabled}
  - {pin_num: '94', peripheral: FLEXCOMM0, signal: TXD_SCL_MISO_WS, pin_signal: PIO0_30/FC0_TXD_SCL_MISO_WS/CTIMER0_MAT0/SCT0_OUT9/SECURE_GPIO0_30, mode: inactive,
    slew_rate: standard, invert: disabled, open_drain: disabled}
  - {pin_num: '85', peripheral: CAN0, signal: CAN_TD, pin_signal: PIO1_27/FC2_RTS_SCL_SSEL1/CTIMER0_MAT3/CLKOUT/PLU_IN4/CAN0_TD, mode: pullUp, slew_rate: standard,
    invert: disabled, open_drain: disabled}
  - {pin_num: '41', peripheral: CAN0, signal: CAN_RD, pin_signal: PIO1_22/CTIMER2_MAT3/SCT_GPI5/FC4_SSEL3/PLU_OUT4/CAN0_RD, mode: pullUp, slew_rate: standard, invert: disabled,
    open_drain: disabled}
 * BE CAREFUL MODIFYING THIS COMMENT - IT IS YAML SETTINGS FOR TOOLS ***********
 */
/* clang-format on */

/* FUNCTION ************************************************************************************************************
 *
 * Function Name : BOARD_InitPins
 * Description   : Configures pin routing and optionally pin electrical features.
 *
 * END ****************************************************************************************************************/
/* Function assigned for the Cortex-M33 */
void BOARD_InitPins(void)
{
    /* Enables the clock for the I/O controller.: Enable Clock. */
    CLOCK_EnableClock(kCLOCK_Iocon);

    const uint32_t port0_pin8_config = (/* Pin is configured as SWO */
                                         IOCON_PIO_FUNC6 |
                                         /* No addition pin function */
                                         IOCON_PIO_MODE_INACT |
                                         /* Standard mode, output slew rate control is enabled */
                                         IOCON_PIO_SLEW_STANDARD |
                                         /* Input function is not inverted */
                                         IOCON_PIO_INV_DI |
                                         /* Enables digital function */
                                         IOCON_PIO_DIGITAL_EN |
                                         /* Open drain is disabled */
                                         IOCON_PIO_OPENDRAIN_DI |
                                         /* Analog switch is open (disabled) */
                                         IOCON_PIO_ASW_DI);
    /* PORT0 PIN10 (coords: 21) is configured as SWO */
    IOCON_PinMuxSet(IOCON, 0U, 8U, port0_pin8_config);

    const uint32_t port0_pin29_config = (/* Pin is configured as FC0_RXD_SDA_MOSI_DATA */
                                         IOCON_PIO_FUNC1 |
                                         /* No addition pin function */
                                         IOCON_PIO_MODE_INACT |
                                         /* Standard mode, output slew rate control is enabled */
                                         IOCON_PIO_SLEW_STANDARD |
                                         /* Input function is not inverted */
                                         IOCON_PIO_INV_DI |
                                         /* Enables digital function */
                                         IOCON_PIO_DIGITAL_EN |
                                         /* Open drain is disabled */
                                         IOCON_PIO_OPENDRAIN_DI);
    /* PORT0 PIN29 (coords: 92) is configured as FC0_RXD_SDA_MOSI_DATA */
   // IOCON_PinMuxSet(IOCON, 0U, 29U, port0_pin29_config);

    const uint32_t port0_pin30_config = (/* Pin is configured as FC0_TXD_SCL_MISO_WS */
                                         IOCON_PIO_FUNC1 |
                                         /* No addition pin function */
                                         IOCON_PIO_MODE_INACT |
                                         /* Standard mode, output slew rate control is enabled */
                                         IOCON_PIO_SLEW_STANDARD |
                                         /* Input function is not inverted */
                                         IOCON_PIO_INV_DI |
                                         /* Enables digital function */
                                         IOCON_PIO_DIGITAL_EN |
                                         /* Open drain is disabled */
                                         IOCON_PIO_OPENDRAIN_DI);
    /* PORT0 PIN30 (coords: 94) is configured as FC0_TXD_SCL_MISO_WS */
  //  IOCON_PinMuxSet(IOCON, 0U, 30U, port0_pin30_config);

    const uint32_t port1_pin3_config = (/* Pin is configured as CAN0_RD */
                                         IOCON_PIO_FUNC9 |
                                         /* Selects pull-up function */
                                         IOCON_PIO_MODE_PULLUP |
                                         /* Standard mode, output slew rate control is enabled */
                                         IOCON_PIO_SLEW_STANDARD |
                                         /* Input function is not inverted */
                                         IOCON_PIO_INV_DI |
                                         /* Enables digital function */
                                         IOCON_PIO_DIGITAL_EN |
                                         /* Open drain is disabled */
                                         IOCON_PIO_OPENDRAIN_DI);
    /* PORT1 PIN22 (coords: 41) is configured as CAN0_RD */
    IOCON_PinMuxSet(IOCON, 1U, 3U, port1_pin3_config);

    const uint32_t port1_pin2_config = (/* Pin is configured as CAN0_TD */
                                         IOCON_PIO_FUNC9 |
                                         /* Selects pull-up function */
                                         IOCON_PIO_MODE_PULLUP |
                                         /* Standard mode, output slew rate control is enabled */
                                         IOCON_PIO_SLEW_STANDARD |
                                         /* Input function is not inverted */
                                         IOCON_PIO_INV_DI |
                                         /* Enables digital function */
                                         IOCON_PIO_DIGITAL_EN |
                                         /* Open drain is disabled */
                                         IOCON_PIO_OPENDRAIN_DI);
    /* PORT1 PIN27 (coords: 85) is configured as CAN0_TD */
    IOCON_PinMuxSet(IOCON, 1U, 2U, port1_pin2_config);
}
/***********************************************************************************************************************
 * EOF
 **********************************************************************************************************************/

 

console prints

SEGGER J-Link GDB Server V7.84a - Terminal output channel
Please select local node as A or B:
Note: Node B should start first.
Node:B
B
Start to Wait data from Node A

 

If I try to send CAN frame ID 0X321 with 500kbps baud rate  from PCAN_view tool , I'm not getting any echo back data in PCAN_view, but if I try the same example with modified pin_mux.c file in LPCXPRESSO55S16 EVAL board I'm getting echo data in PCAN_view tool, as well as I can see data in console.

Note: I have checked the hardware of custom board , there is no signal in CAN micro controller pins, while sending or receiving CAN frames.

Please help me to fix this issue.

@lpcxpresso_supp @lpcware @lpcxpresso

Labels (3)
Tags (2)
0 Kudos
1 Solution
656 Views
aravinth_k
Contributor II

Hi ,

Thanks for your reply,

 

The problem is with power cycle initialization procedure , the CAN driver's standby pin must be initialized during the power cycle initialization ,  I mistakenly initialized the standby pin one line before CAN tx operation , basically the standby pin must be initialized during the power cycle with some delay, I changed the code and it's finally worked for me , but whatever mentioned here is it's only works on zephyr stack not MCUxpresso IDE's SDK build still the problem is there in SDK MCUxpressso IDE build.

 

Thanks for your support !

View solution in original post

0 Kudos
5 Replies
781 Views
xiangjun_rong
NXP TechSupport
NXP TechSupport

Hi,

As the pin assignment in data sheet of LPC551x, the Func bits should be 1 instead of 9.

So pls try to use the code in the pin_mux.c

const uint32_t port1_pin3_config = (/* Pin is configured as CAN0_RD */
                                         IOCON_PIO_FUNC1 |
                                         /* Selects pull-up function */
                                         IOCON_PIO_MODE_PULLUP |
                                         /* Standard mode, output slew rate control is enabled */
                                         IOCON_PIO_SLEW_STANDARD |
                                         /* Input function is not inverted */
                                         IOCON_PIO_INV_DI |
                                         /* Enables digital function */
                                         IOCON_PIO_DIGITAL_EN |
                                         /* Open drain is disabled */
                                         IOCON_PIO_OPENDRAIN_DI);
    /* PORT1 PIN22 (coords: 41) is configured as CAN0_RD */
    IOCON_PinMuxSet(IOCON, 1U, 3U, port1_pin3_config);

    const uint32_t port1_pin2_config = (/* Pin is configured as CAN0_TD */
                                         IOCON_PIO_FUNC1 |
                                         /* Selects pull-up function */
                                         IOCON_PIO_MODE_PULLUP |
                                         /* Standard mode, output slew rate control is enabled */
                                         IOCON_PIO_SLEW_STANDARD |
                                         /* Input function is not inverted */
                                         IOCON_PIO_INV_DI |
                                         /* Enables digital function */
                                         IOCON_PIO_DIGITAL_EN |
                                         /* Open drain is disabled */
                                         IOCON_PIO_OPENDRAIN_DI);
    /* PORT1 PIN27 (coords: 85) is configured as CAN0_TD */
    IOCON_PinMuxSet(IOCON, 1U, 2U, port1_pin2_config);

 

xiangjun_rong_0-1695264665936.png

 

Pls have a try

BR

XiangJun Rong

0 Kudos
761 Views
aravinth_k
Contributor II

Hi @xiangjun_rong 

Thanks for your reply,

I changed the pin_mux.c as mentioned in your comment, but still if I try to send the CAN frame I'm getting bus heavy error also I'm not getting any data in console, please let me know if any other configuration I have to change.

Thanks in advance !

0 Kudos
753 Views
xiangjun_rong
NXP TechSupport
NXP TechSupport

Hi,

I suppose that you know the CAN protocol, in order to communicate via CAN bus, each CAN node has to connect a PHY, with the PHY, two can node can communicate. Because CAN requires handshaking signal, you have to connect two CAN nodes at least so that they can communicate.

What is your issue now?

BR

XiangJun Rong

0 Kudos
742 Views
frank_m
Senior Contributor III

I might add, for a simple test with a similiar CAN device (another LPC board with the same voltage levels), direct connection between the two CAN-Rx/CAN-Tx pins would work as well.
The connection would have to be short, and include a GND wire.

And even without another bus participant, a scope should reveal if the interface basically works, or not.

0 Kudos
657 Views
aravinth_k
Contributor II

Hi ,

Thanks for your reply,

 

The problem is with power cycle initialization procedure , the CAN driver's standby pin must be initialized during the power cycle initialization ,  I mistakenly initialized the standby pin one line before CAN tx operation , basically the standby pin must be initialized during the power cycle with some delay, I changed the code and it's finally worked for me , but whatever mentioned here is it's only works on zephyr stack not MCUxpresso IDE's SDK build still the problem is there in SDK MCUxpressso IDE build.

 

Thanks for your support !

0 Kudos