Unable to enable CAN in IMX8QM-MEK for mek_8q_car
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am trying to enable CAN interfaces of i.MX8QM-MEK device using the "imx-automotive-11.0.0_1.1.0". I have done the below configurations,
- Changed the status of below items in "imx8qm-mek-rpmsg.dts" to ‘status = "okay"’
- ®_can01_en
- ®_can01_stby
- &can0_lpcg
- &can1_lpcg
- &flexcan1
- &flexcan2
- Added the below lines to the file "device/nxp/imx8q/mek_8q/automotive_addition_defconfig"
CONFIG_CC_CAN_LINK=y
CONFIG_CAN=y
CONFIG_CAN_RAW=y
CONFIG_CAN_BCM=y
CONFIG_CAN_GW=y
CONFIG_CAN_DEV=y
CONFIG_CAN_CALC_BITTIMING=y
CONFIG_CAN_FLEXCAN=y
- Commented the below line in the file 'vendor/nxp/fsl-proprietary/uboot-firmware/imx8q_car/board-imx8qm.c'.
/*BRD_ERR(rm_set_resource_movable(pt_boot, SC_R_CAN_0,
SC_R_CAN_2, SC_TRUE));*/
/*BRD_ERR(rm_set_pad_movable(pt_boot, SC_P_FLEXCAN0_RX,
SC_P_FLEXCAN2_TX, SC_TRUE));*/
After flashing the build, the messages shown in dmesg | grep can are,
[ 1.680016] can: controller area network core (rev 20170425 abi 9)
[ 1.690682] can: raw protocol (rev 20170425)
[ 1.694956] can: broadcast manager protocol (rev 20170425 t)
[ 1.700620] can: netlink gateway (rev 20190810) max_hops=1
But the can0 device is not listed when 'ifconfig -a' command is run.
/dev/can0 is not showing.
Tried to run the command "# ip link set can0 type can bitrate 125000 triple-sampling on" and the output was 'Cannot find device "can0"'.
Can someone advice me on what is wrong with above configuration and how to correct it to enable the CAN?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi @Lancelot ,
have you been successful when using the guide from Martin? Let me know if you struggle on some part.
Best Regards,
Zdenek
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am trying to enable CAN bus on a iMX8QM MEK board + MCIMX8-8X-BB Base Board using i.MX Android automotive-13.0.0_1.3.0 and fail.
None of the things TAug tried worked, neither the things suggested in these topics:
- https://community.nxp.com/t5/i-MX-Processors/CANBus-interface-for-i-MX8QM-MEK-board/m-p/1171974
What are we missing ?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Elaborating on my previous post,
- iMX8QM MEK board + MCIMX8-8X-BB Base Board + imx-automotive-13.0.0_1.3.0.tar.gz
I've done the following changes:
1. Enabled the following modules @ imx8qm-mek-rpmsg.dts:
®_can01_en {
status = "okay";
};
®_can2_en {
status = "okay";
};
®_can01_stby {
status = "okay";
};
®_can2_stby {
status = "okay";
};
&can0_lpcg {
status = "okay";
};
&can1_lpcg {
status = "okay";
};
&can2_lpcg {
status = "okay";
};
&flexcan1 {
status = "okay";
};
&flexcan2 {
status = "okay";
};
&flexcan3 {
status = "okay";
};
2. Commented out the CAN resources and pads from M4 @ vendor/nxp/fsl-proprietary/uboot-firmware/imx8q_car/board-imx8qm, as per this thread (https://community.nxp.com/t5/i-MX-Processors/CANBus-interface-for-i-MX8QM-MEK-board/m-p/1169857/high... the CAN resources must be allocated to A core.
/* List of resources */
static const sc_rsrc_t rsrc_list[12U] =
{
SC_R_IRQSTR_M4_1,
SC_R_UART_2,
SC_R_MU_6B,
SC_R_MU_7B,
SC_R_MU_9B,
SC_R_GPT_3,
//RM_RANGE(SC_R_CAN_0, SC_R_CAN_2),
SC_R_FSPI_0,
SC_R_MU_12B,
SC_R_M4_1_INTMUX,
SC_R_GPIO_1
};
/* List of pads */
static const sc_pad_t pad_list[8U] =
{
RM_RANGE(SC_P_M41_I2C0_SCL, SC_P_M41_GPIO0_01),
RM_RANGE(SC_P_UART0_CTS_B, SC_P_UART0_RTS_B),
//RM_RANGE(SC_P_FLEXCAN0_RX, SC_P_FLEXCAN2_TX),
RM_RANGE(SC_P_QSPI0A_DATA0, SC_P_COMP_CTL_GPIO_1V8_3V3_QSPI0)
};
3. I'm building with imx-make.sh, using target mek_8q_car-userdebug and I've noticed the following:
- out/target/product/mek_8q/vendor_dlkm/lib/modules contains no CAN modules:
$ ls
at803x.ko
fb.ko
mlan.ko
phy-fsl-imx8-pcie.ko
snd-soc-simple-card.ko
spi-fsl-lpspi.ko
cfbcopyarea.ko
fb_notify.ko
moal.ko
phy-generic.ko
snd-soc-simple-card-utils.ko
spi-imx.ko
cfbfillrect.ko
fec.ko
modules.alias
snd-soc-bt-sco.ko
snd-soc-wm8960.ko
spi-slave-system-control.ko
cfbimgblt.ko
galcore.ko
modules.dep
snd-soc-cs42xx8-i2c.ko
snd-sof-imx8.ko
spi-slave-time.ko
cfg80211.ko
imx-common.ko
modules.load
snd-soc-cs42xx8.ko
snd-sof.ko
ulpi.ko
ci_hdrc_imx.ko
imx_dsp_rproc.ko
modules.softdep
snd-soc-fsl-asoc-card.ko
snd-sof-of.ko
usbmisc_imx.ko
ci_hdrc.ko
imx-pcm-dma.ko
mx3fb.ko
snd-soc-fsl-esai.ko
snd-sof-xtensa-dsp.ko
device_cooling.ko
imx_sc_thermal.ko
mxc_edid.ko
snd-soc-fsl-sai.ko
spi-bitbang.ko
fb_fence.ko
mac80211.ko
pci-imx6.ko
snd-soc-imx-audmux.ko
spidev.ko
- in addition, out/target/product/mek_8q/vendor/lib/modules is symlinked to fixed path /vendor_dlkm/lib/modules, rather than relative ../../vendor_dlkm/lib/modules
$ ls -al | grep modules
modules -> /vendor_dlkm/lib/modules
After building with this config and flashing the board with uuu script, I checked for the can modules via lsmod and kernel config:
mek_8q:/ $ lsmod | grep can
1|mek_8q:/ $ zcat proc/config.gz | grep CAN
# CONFIG_NET_EMATCH_CANID is not set
CONFIG_CAN=y
CONFIG_CAN_RAW=y
CONFIG_CAN_BCM=y
CONFIG_CAN_GW=y
# CONFIG_CAN_J1939 is not set
# CONFIG_CAN_ISOTP is not set
# CAN Device Drivers
# CONFIG_CAN_VCAN is not set
# CONFIG_CAN_VXCAN is not set
# CONFIG_CAN_SLCAN is not set
CONFIG_CAN_DEV=y
CONFIG_CAN_CALC_BITTIMING=y
# CONFIG_CAN_FLEXCAN is not set
# CONFIG_CAN_GRCAN is not set
# CONFIG_CAN_KVASER_PCIEFD is not set
# CONFIG_CAN_XILINXCAN is not set
# CONFIG_CAN_C_CAN is not set
# CONFIG_CAN_CC770 is not set
# CONFIG_CAN_IFI_CANFD is not set
# CONFIG_CAN_M_CAN is not set
# CONFIG_CAN_PEAK_PCIEFD is not set
# CONFIG_CAN_SJA1000 is not set
# CONFIG_CAN_SOFTING is not set
# CAN SPI interfaces
# CONFIG_CAN_HI311X is not set
# CONFIG_CAN_MCP251X is not set
# CONFIG_CAN_MCP251XFD is not set
# end of CAN SPI interfaces
# CAN USB interfaces
# CONFIG_CAN_8DEV_USB is not set
# CONFIG_CAN_EMS_USB is not set
# CONFIG_CAN_ESD_USB2 is not set
# CONFIG_CAN_ETAS_ES58X is not set
# CONFIG_CAN_GS_USB is not set
# CONFIG_CAN_KVASER_USB is not set
# CONFIG_CAN_MCBA_USB is not set
# CONFIG_CAN_PEAK_USB is not set
# CONFIG_CAN_UCAN is not set
# end of CAN USB interfaces
# CONFIG_CAN_DEBUG_DEVICES is not set
# end of CAN Device Drivers
# CONFIG_SCSI_SCAN_ASYNC is not set
# CONFIG_PHY_CAN_TRANSCEIVER is not set
mek_8q:/ $
What am I missing ?
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi @Lancelot ,
i noticed a little mistake in your scfw setup, the list should have 10 items
static const sc_rsrc_t rsrc_list[12U] =
I don`t know what is your final goal, but if you would like to have CAN on Android Automotive side please check this step-by-step example.
Martin
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello Martin,
Thank you very much for replying on this.
Regarding the "sc_rsrc_t rsrc_list[12U]" list, the only change I did is comment out the highlighted elements. My goal is to enable the CAN bus, and have ifconfig -a command detect the interface.
Regarding the link you provided, I receive 'access denied' when accessing it - maybe it's an internal resource, or perhaps it's available only to specific account tiers ?
Lancelot
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
We lost a day by finding a similar mistake in SCFW when were doing QNX/AA13 HW partition demo. Because it allocates more space than it is needed...
If you don`t have access I am including these patches, which enable CAN on the AA side. You can check it with can-utils [1].
Can-utils repo should be cloned into ../android_build/external
after that go into that folder and run mm cmd for module compilation. It may gives you errors therefore you need to add this:
diff --git a/Android.mk b/Android.mk
index 35454b6..caa1c52 100644
--- a/Android.mk
+++ b/Android.mk
@@ -2,6 +2,7 @@ LOCAL_PATH := $(call my-dir)
PRIVATE_LOCAL_CFLAGS := -O2 -g -W -Wall \
-Wno-error=unused-parameter \
+ -Wno-gnu-variable-sized-type-not-at-end \
-DSO_RXQ_OVFL=40 \
-DPF_CAN=29 \
-DAF_CAN=PF_CAN
after that, it should be compiled. Let me know if it doesn`t work.
[1] https://github.com/linux-can/can-utils.git
Martin
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
@martin_durak @zdenek_zadera
My apologies for replying this late, and thank you again for your help.
I followed Martin's guide with one exception: scfw_move_flexcan_to_acore.patch targets the board file of iMX8QuadXPlus-MEK -- my board is iMX8QuadMax-MEK.
So, following chapter 8.7 in this guide by using the configuration file of 8QuadMax MEK, changed like below:
/* List of resources */
static const sc_rsrc_t rsrc_list[7U] =
{
SC_R_IRQSTR_M4_1,
SC_R_UART_2,
SC_R_MU_6B,
SC_R_MU_7B,
SC_R_MU_9B,
SC_R_GPT_3,
//RM_RANGE(SC_R_CAN_0, SC_R_CAN_2),
SC_R_FSPI_0
};
/* List of pads */
static const sc_pad_t pad_list[6U] =
{
RM_RANGE(SC_P_M41_I2C0_SCL, SC_P_M41_GPIO0_01),
RM_RANGE(SC_P_UART0_CTS_B, SC_P_UART0_RTS_B),
//RM_RANGE(SC_P_FLEXCAN0_RX, SC_P_FLEXCAN2_TX),
RM_RANGE(SC_P_QSPI0A_DATA0, SC_P_COMP_CTL_GPIO_1V8_3V3_QSPI0)
};
... I was able to build the SCFW binary. I copyied it back to ${MY_ANDROID}/vendor/nxp/fsl-proprietary/
uboot-firmware/imx8q_car/mx8qm-scfw-tcm.bin, built the can utils module, and finally ran imx-make.sh -j for a full build -> it was a successful build.
However, after flashing the board with the resulted images using uuu, nothing gets displayed on screen, the board is not detected by adb and a serial connection cannot be made with the board either.
I am not sure what is wrong, as there are no logs for me to debug.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hi,TAug.
I have the same problem. Have you solved it? How is it debugged?