Multi Source Translation Content

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

Multi Source Translation Content

ディスカッション

ソート順:
S32K358 EVK board CAN not working Hello,  I am trying to run the code to use the CAN0 or CAN1 of S32K3x8EV8 board but I am not able to do so. But CAN is not working at all, I am trying read the can messages via Waveshare USB-CAN-A. Pasted the code as well,  Add screenshot of CAN Config /* * Copyright 2019 NXP * * All rights reserved. * * THIS SOFTWARE IS PROVIDED BY NXP "AS IS" AND ANY EXPRESSED 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 NXP OR ITS 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. */ /* ################################################################### ******************************************************************************** * File: main.c * Owner: Petr Stancik * Version: 1.0 * Date: Oct-22-2024 * Classification: General Business Information * Brief: FlexCAN TX/RX ISR test * ******************************************************************************** ******************************************************************************** The purpose of this demo application is to show you the usage of the FlexCAN module configured to use CAN FD using the S32 RTD API. - This demo application requires two boards, or single board connected with CAN tool. - CAN FD is enabled with bitrate 500/2000 kbps - It configures FlexCAN0 module and its transceiver (TJA1153). - MB0 is used to transmit CANFD std. ID - MB1 is configured to receive any std. ID - Callback function is used as well to handle TX and RX process in MBs. Received ID is echoed back. - setupCanXCVR function is called to Init TJA1153 connected to FlexCAN0 on the board. It expects transceiver in Vanilla state and set TPL to pass all std and ext ID and do not block any message coming from bus. Finally leaving configuration mode without writing to non-volatile memory nor locking the transceiver. * * ------------------------------------------------------------------------------ * Test HW: S32K3X8EVB-Q289 rev B2 * MCU: P32K358HVS 0P14E * Compiler: S32DS.ARM.3.5 * SDK release: S32K3_RTD_4.0.0_D2311 * Debugger: Lauterbach * Target: internal_FLASH * ******************************************************************************** Revision History: 1.0 Oct-22-2024 Petr Stancik Initial Version based on RTD FlexCAN_Ip_example *******************************************************************************/ /* Including necessary configuration files. */ #include "Mcal.h" #include "Clock_Ip.h" #include "FlexCAN_Ip.h" #include "IntCtrl_Ip.h" #include "Siul2_Port_Ip_Cfg.h" #include "Siul2_Dio_Ip_Cfg.h" #include "Siul2_Dio_Ip.h" #include "Siul2_Port_Ip.h" #include "OsIf.h" #define MSG_ID 20u #define RX_MB_IDX 1U #define TX_MB_IDX 0U volatile int exit_code = 0; /* User includes */ Flexcan_Ip_DataInfoType tx_info = { .msg_id_type = FLEXCAN_MSG_ID_STD, .data_length = 1u, .fd_enable = FALSE, .fd_padding = FALSE, .enable_brs = FALSE, .is_polling = FALSE, .is_remote = FALSE }; Flexcan_Ip_DataInfoType rx_info = { .msg_id_type = FLEXCAN_MSG_ID_STD, .data_length = 1u, .fd_enable = FALSE, .fd_padding = FALSE, .enable_brs = FALSE, .is_polling = FALSE, .is_remote = FALSE }; Flexcan_Ip_MsgBuffType rxData; uint8 dummyData[8]; volatile uint32 g_canErrorStatus = 0; /* live ESR1 snapshot for debugger watch */ volatile Flexcan_Ip_StatusType g_tja1153Status[3]; /* [0]=auto-baud, [1]=FEC whitelist, [2]=exit config */ /*! \brief The main function for the project. \details The startup initialization sequence is the following: * - startup asm routine * - main() */ extern void CAN0_ORED_0_31_MB_IRQHandler(void); void setupCanXCVR_TJA1153(void); static void CAN_DelayMs(uint32 ms) { uint32 ticks = OsIf_MicrosToTicks(ms * 1000U, FLEXCAN_IP_SERVICE_TIMEOUT_TYPE); uint32 start = OsIf_GetCounter(FLEXCAN_IP_SERVICE_TIMEOUT_TYPE); uint32 elapsed = 0U; while (elapsed < ticks) { elapsed += OsIf_GetElapsed(&start, FLEXCAN_IP_SERVICE_TIMEOUT_TYPE); } } void flexcan0_Callback(uint8 instance, Flexcan_Ip_EventType eventType, uint32 buffIdx, const Flexcan_Ip_StateType *flexcanState) { (void)flexcanState; (void)instance; switch(eventType) { case FLEXCAN_EVENT_RX_COMPLETE: dummyData[0]++; if(buffIdx==1) // MB1 received { FlexCAN_Ip_Send(INST_FLEXCAN_0, TX_MB_IDX, &tx_info, rxData.msgId, (uint8 *)&dummyData); FlexCAN_Ip_Receive(INST_FLEXCAN_0, RX_MB_IDX, &rxData, false); } break; case FLEXCAN_EVENT_RXFIFO_COMPLETE: break; case FLEXCAN_EVENT_TX_COMPLETE: break; case FLEXCAN_EVENT_ENHANCED_RXFIFO_COMPLETE: break; case FLEXCAN_EVENT_ENHANCED_RXFIFO_WATERMARK: break; default: break; } } void setupCanXCVR_TJA1153(void) { /** * The TJA1153 transceiver does not come ready to use as most CAN transceivers * It enters configuration mode initially if it has not been configured before, * in this initial state, it is ready for receiving additional security * setups such as an TPL/BBL for example. * * In this example, it set TPL to pass all std and ext ID and do not block any message * coming from bus. Finally leaving configuration mode without writing to non-volatile * memory nor locking the transceiver. * * Refer to the NXP's TJA1153 data sheet for further detail. * */ #define TJA1153_START_ID (uint32_t)(0x555u) #define TJA1153_CONFIG_ID (uint32_t)(0x18DA00F1u) uint8 sendData[8]={0,0,0,0,0,0,0,0}; uint32_t errors; /* Allow configuration from local host via TXD pin for CAN0 transceiver, STB = 0 (PTC20) */ Siul2_Dio_Ip_WritePin(PTC_H_HALF, 4, 0U); CAN_DelayMs(1000); /* Auto bit rate detection initial CAN Classic frame with ID 0x555 for CAN0 */ tx_info.is_polling = TRUE; tx_info.msg_id_type = FLEXCAN_MSG_ID_STD; tx_info.data_length=8; g_tja1153Status[0] = FlexCAN_Ip_SendBlocking(INST_FLEXCAN_0, TX_MB_IDX, &tx_info, TJA1153_START_ID, sendData, 1000); /* Filter Element Configuration (FEC) frame for setting up the transmission whitelist. * NOTE: ID_TX is the NXP reference example's placeholder (0xC0FFEE), not MSG_ID - * this whitelists that single extended ID only. Confirm this baseline works first, * then adjust ID_TX/Extended_Filter_Config per the TJA1153 datasheet for your real ID(s). */ { uint32_t ID_Stinger = TJA1153_CONFIG_ID; uint32_t PAYLOAD_FEC[2]; uint8_t COMMAND_BYTE_FEC = 0x10; uint8_t Filter_Element_Index_0 = 0; uint8_t Filter_Element_Type = 1; uint8_t Extended_Filter_Config = 3; /* Both TWL and BBL */ uint32_t ID_TX = 0xC0FFEE; uint32_t Filter_Element_Contents = (Extended_Filter_Config << 29) | ID_TX; PAYLOAD_FEC[0] = (COMMAND_BYTE_FEC << 24) | (Filter_Element_Index_0 << 16) | (Filter_Element_Type << 15) | (Filter_Element_Contents >> 16); PAYLOAD_FEC[1] = (Filter_Element_Contents & 0xFFFF) << 16; sendData[0] = (uint8)((PAYLOAD_FEC[0] >> 24) & 0xFFU); sendData[1] = (uint8)((PAYLOAD_FEC[0] >> 16) & 0xFFU); sendData[2] = (uint8)((PAYLOAD_FEC[0] >> 8) & 0xFFU); sendData[3] = (uint8)(PAYLOAD_FEC[0] & 0xFFU); sendData[4] = (uint8)((PAYLOAD_FEC[1] >> 24) & 0xFFU); sendData[5] = (uint8)((PAYLOAD_FEC[1] >> 16) & 0xFFU); tx_info.msg_id_type = FLEXCAN_MSG_ID_EXT; tx_info.data_length = 6; g_tja1153Status[1] = FlexCAN_Ip_SendBlocking(INST_FLEXCAN_0, TX_MB_IDX, &tx_info, ID_Stinger, sendData, 1000); CAN_DelayMs(5); } /* Last command frame for exiting configuration mode without writing to non-volatile memory nor * locking the transceiver, i.e. Development mode */ sendData[0]= 0x71; // command byte sendData[1]= 0x2; sendData[2]= 0x3; sendData[3]= 0x4; sendData[4]= 0x5; sendData[5]= 0x6; sendData[6]= 0x7; sendData[7]= 0x8; tx_info.msg_id_type = FLEXCAN_MSG_ID_EXT; tx_info.data_length=8; g_tja1153Status[2] = FlexCAN_Ip_SendBlocking(INST_FLEXCAN_0, TX_MB_IDX, &tx_info, TJA1153_CONFIG_ID, sendData, 1000); /* After the last frame, the transceiver exits configuration mode and goes to standby mode, exit * to normal operation mode is done by setting the STB pin of CAN0 transceiver to HIGH (pin is negated) */ Siul2_Dio_Ip_WritePin(PTC_H_HALF, 4, 1U); CAN_DelayMs(1000); errors = FlexCAN_Ip_GetErrorStatus(INST_FLEXCAN_0); FlexCAN_Ip_ClearErrorStatus(INST_FLEXCAN_0,errors); } int main(void) { /* Write your code here */ Clock_Ip_Init(&Clock_Ip_aClockConfig[0]); Siul2_Port_Ip_Init(NUM_OF_CONFIGURED_PINS0, g_pin_mux_InitConfigArr0); IntCtrl_Ip_EnableIrq(FlexCAN0_1_IRQn); IntCtrl_Ip_InstallHandler(FlexCAN0_1_IRQn, CAN0_ORED_0_31_MB_IRQHandler, NULL_PTR); FlexCAN_Ip_Init(INST_FLEXCAN_0, &FlexCAN_State0, &FlexCAN_Config0); FlexCAN_Ip_SetRxMaskType_Privileged(INST_FLEXCAN_0,FLEXCAN_RX_MASK_INDIVIDUAL); FlexCAN_Ip_SetRxIndividualMask_Privileged(INST_FLEXCAN_0,RX_MB_IDX,0x0<<18); // clear mask register to allow receiving all std IDs FlexCAN_Ip_SetStartMode(INST_FLEXCAN_0); setupCanXCVR_TJA1153(); tx_info.is_polling = FALSE; tx_info.msg_id_type = FLEXCAN_MSG_ID_STD; tx_info.data_length=8; tx_info.fd_enable = false; tx_info.enable_brs = false; FlexCAN_Ip_ConfigRxMb(INST_FLEXCAN_0, RX_MB_IDX, &rx_info, MSG_ID); FlexCAN_Ip_Receive(INST_FLEXCAN_0, RX_MB_IDX, &rxData, false); FlexCAN_Ip_Send(INST_FLEXCAN_0, TX_MB_IDX, &tx_info, MSG_ID, (uint8 *)&dummyData); while(1) { g_canErrorStatus = FlexCAN_Ip_GetErrorStatus(INST_FLEXCAN_0); } return 0; } /* END main */ /*! ** @} */ Re: S32K358 EVK board CAN not working Hi@Yash2530 The attached file contains tests I conducted on RTD version 3.0.0 P07, which you can refer to. Re: S32K358 EVK board CAN not working Hi Senlent,  The Can transmission TX is working I am able to receive the data from NXP to Waveshare USB CAN device but RX does not seem to be working.  I am sending 0x001 as id and 01 01 01 01 01 01 01 01 as data.  Is there something that I am missing or the code you provided is only for TX.  Re: S32K358 EVK board CAN not working Hi@Yash2530 Yes, this demo is only to show you if the sending function is working correctly; it does not include any receiving function. Re: S32K358 EVK board CAN not working Hello @Senlent , Please share the one demo where RX and TX both are working. Regards, Yash Gupta
記事全体を表示
S32K3X4EVB-Q257 开发板上的 K26 固件缺失。 我的 S32K3X4EVB-Q257 开发板上的 OpenSDA 无法工作。我已经安装了 PEmicro 驱动程序,但是我的电脑设备管理器中仍然无法识别 OpenSDA。我确信这是因为缺少 K26 固件。请问您能提供给我那个固件吗? Re: The K26 firmware on the S32K3X4EVB-Q257 development board is missing. 如果更换包含 D+ 和 D- 信号的 USB 电缆后问题仍然存在,我建议联系 PEMicro 技术支持。https://www.pemicro.com/support/index.cfm Re: The K26 firmware on the S32K3X4EVB-Q257 development board is missing. 我的开发板采用 K26 芯片,但 PEFirmwareConfig.exe 无法识别板载调试器。K26的OpenSDA固件肯定缺失。 Re: The K26 firmware on the S32K3X4EVB-Q257 development board is missing. HI 首先,检查 U63 上的 K26 是否焊接牢固。由于 K26 芯片短缺,有一批开发板上没有焊接 K26 芯片,因此必须使用外部调试器。 第二步,下载 USB 多链路资源安装 来自多链路调试探针。不使用 USB 集线器,将 USB 连接到 S32K3X4EVB-Q257 的 J55; PEFirmwareConfig.exe能否识别板载调试器? 此致敬礼, Robin
記事全体を表示
The K26 firmware on the S32K3X4EVB-Q257 development board is missing. The OpenSDA on my S32K3X4EVB-Q257 development board is not working. I have already installed the PEmicro driver, but OpenSDA is still not recognized in my computer's Device Manager. I am sure it is because the K26 firmware is missing. Could you please provide me with that firmware? Re: The K26 firmware on the S32K3X4EVB-Q257 development board is missing. If the problem persists after replacing the USB cable with one that includes D+ and D- signals, I recommend contacting PEMicro technical support. https://www.pemicro.com/support/index.cfm Re: The K26 firmware on the S32K3X4EVB-Q257 development board is missing. My development board has a K26 chip, and PEFirmwareConfig.exe cannot recognize the onboard debugger. The K26's OpenSDA firmware is definitely missing. Re: The K26 firmware on the S32K3X4EVB-Q257 development board is missing. Hi First, check if the K26 on the U63 is soldered. There was a batch of development boards that did not have the K26 soldered on them because of a shortage of K26, so an external debugger had to be used. Second, download the  USB Multilink Resources Install  from the Multilink Debug Probes. Without using a USB hub, connect the USB to the J55 of S32K3X4EVB-Q257; can the onboard debugger be recognized in PEFirmwareConfig.exe? Best Regards, Robin
記事全体を表示
S32K344 FreeRTOS 示例链接失败 你好; 我刚开始使用 S32K344 EVK(S32K344MINI-EVB),目前使用的是 IDE 3.6.5 和 FreeRTOS 7.0.0。(D2511)包含在软件包管理器创建的 FRDM 汽车软件包中。 我正在尝试通过“S32DS 项目示例”构建一个为 344 提供的示例应用程序,即 FreeRTOS_Toggle_Led_Example_S32K344。 我使用 ConfigTools 更新了代码,但到目前为止,这是我对代码所做的唯一修改。 但这段代码直接运行在链接阶段就失败了: c:/nxp/s32ds.3.6.5/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/bin/real-ld.exe:./FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.o:在函数“vPortStoreTaskMPUSettings”中: C:\Workspaces-35\FreeRTOS_Toggle_Led_Example_S32K344\Debug_FLASH/../FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.c:1890: 未定义的引用“__FreeRTOS_code_data_start__” c:/nxp/s32ds.3.6.5/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/bin/real-ld.exe:C:\Workspaces-35\FreeRTOS_Toggle_Led_Example_S32K344\Debug_FLASH/../FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.c:1890: 未定义的引用“__FreeRTOS_code_data_end__” c:/nxp/s32ds.3.6.5/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/bin/real-ld.exe:./FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.o:在函数“prvSetupMPU”中: C:\Workspaces-35\FreeRTOS_Toggle_Led_Example_S32K344\Debug_FLASH/../FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.c:1723: 未定义的引用“__FreeRTOS_code_data_end__” c:/nxp/s32ds.3.6.5/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/bin/real-ld.exe:C:\Workspaces-35\FreeRTOS_Toggle_Led_Example_S32K344\Debug_FLASH/../FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.c:1723: 未定义的引用“__FreeRTOS_code_data_start__” 我推测这些是链接器部分,但它们似乎在示例代码、软件包内的 FreeRTOS 文件夹或其他地方都没有定义。 “S32DS 项目示例”是否已过时?或者这个问题有我没注意到的简单解决方法吗? 提前致谢, 乔·希德尔 Re: S32K344 FreeRTOS example fails to link 你好,乔·希德尔, 给您带来的不便,我们深表歉意! 我重现了示例由于 Ld 错误而无法正确构建的问题,他们的解决方案是正确的: 根本原因:S32CT 中默认启用了 MPU。这会导致代码生成器生成支持 MPU 的代码(包括对 FreeRTOS MPU 链接器符号的引用)。但是Toggle_Led_Example_S32K344的链接器脚本 (linker_flash_s32k344.ld) 并未定义这些 MPU 内存区域或其边界符号——这些仅存在于 MPU 特定示例中(例如 FreeRTOS_MPU_Example_S32K389/linker_flash_s32k389.ld)。生成的代码需要 MPU 符号,而链接器脚本则不需要 MPU 符号,这导致了未定义引用错误。 禁用“use mpu”选项后,示例程序可以正确编译: 副作用说明:默认情况下禁用 MPU 意味着需要 MPU 的用户必须在 S32CT 中显式启用它并配置内存区域。 此致敬礼, Robin
記事全体を表示
LPC1778 checksum in vector table invalid need recover 你好,我在调试LPC1778的FLM时,调用FLM向0x0-0x400写入数据之后发现数据不正确。现在我的调试器无法连接芯片,我查阅了资料,认为是vector table写入的数据出错了,和我想要写入的数据不一致,导致checksum不合法。资料显示checksum不合法会导致芯片进入ISP模式等待下载程序。 1.我想知道这个状态要怎么恢复? 2.为什么FLM写0x0-0x400会引发问题,我尝试了写0x400-0x7FFFF都是正常的。翻看FLM源码,其中有个SET_VALID_CODE的参数会自动修改校验和,是不是这部分有什么问题? Re: LPC1778 checksum in vector table invalid need recover Hi @BianHaopeng1  0x0000–0x0400 不只是普通 flash 数据区,它包含启动向量表、0x1C 的 valid-code checksum,以及 0x2FC 的 CRP 配置字 。checksum 错会让 ROM bootloader 判定 user code invalid 并进入 ISP;如果 0x2FC 被误写成 CRP pattern,还会导致 JTAG/SWD 访问受限甚至不可恢复到普通调试状态。 您可以优先按 ISP 恢复 处理: 拉低 P2[10],然后复位芯片 ,bootloader 接管并进入 ISP mode。 通过 UART0:P0[2] / P0[3] 连接 FlashMagic 或等价 ISP 工具,执行全片擦除或重新下载一个有效镜像。 如果只是 checksum 不合法 ,进入 ISP 后应能擦除并恢复;如果误写了 CRP1/CRP2 ,JTAG 会被禁用,但 ISP 仍有受限恢复路径;如果误写成 CRP3 ,文档说明它会完全禁止 JTAG 和 ISP,这种情况下基本不能再通过常规 ISP/JTAG 恢复。 BR Harry
記事全体を表示
S32K358 EVK 板 CAN 总线无法工作 你好, 我尝试运行代码来使用 S32K3x8EV8 板的 CAN0 或 CAN1,但我无法做到。但是 CAN 完全不起作用,我正在尝试通过 Waveshare USB-CAN-A 读取 CAN 消息。 代码也粘贴好了,附上CAN配置截图 /* * 版权所有 2019 NXP * * ALL RIGHTS RESERVED. * * 本软件由 NXP“按原样”提供,且不提供任何明示或暗示的保证。 * 默示担保,包括但不限于默示担保 * 不保证其适销性和适用于特定用途。 * 在任何情况下,NXP 或其贡献者均不对任何直接、 * 间接的、附带的、特殊的、惩罚性的或后果性的损害赔偿 *(包括但不限于采购替代商品或 * 服务;使用损失、数据丢失或利润损失;或业务中断) 无论何种原因造成,也无论基于何种责任理论,无论是合同责任, * 严格责任或侵权行为(包括过失或其他) 即使已被告知,也不得以任何方式退出本软件的使用。 * 发生此类损害的可能性。 */ /* ################################################################### ******************************************************************************** 文件:main.c * 所有者:彼得·斯坦西克 * 版本:1.0 * 日期: 2024年10月22日 * 分类:一般商业信息 * 简介:FlexCAN TX/RX ISR 测试 * ******************************************************************************** ******************************************************************************** 此演示应用程序的目的是向您展示 FlexCAN 模块的用法。 配置为使用 S32 RTD API 的 CAN FD。 - 此演示应用程序需要两块板,或者使用 CAN 工具连接一块板。 - CAN FD 已启用,比特率为500/2000 kbps - 它配置 FlexCAN0 模块及其收发器 (TJA1153)。 - MB0 用于传输 CANFD STD. ID - MB1 配置为接收任何 STD ID - 回调函数也用于处理 MB 中的 TX 和 RX 过程。收到的 ID 为 回声响起。 - 调用 setupCanXCVR 函数初始化连接到板上 FlexCAN0 的 TJA1153。 它期望收发器处于 Vanilla 状态,并将 TPL 设置为传递所有STD和扩展ID。 不要屏蔽来自总线的任何消息。最后退出配置模式 无需写入非易失性存储器,也无需锁定收发器。 * * ------------------------------------------------------------------------------ * 测试硬件:S32K3X8EVB-Q289 rev B2 * MCU:P32K358HVS 0P14E * 编译器:S32DS.ARM.3.5 * SDK 版本:S32K3_RTD_4.0.0_D2311 * 调试器: Lauterbach * 目标:内部闪存 * ******************************************************************************** 修订记录: 1.0 2024年10月22日Petr Stancik初始版本,基于 RTD FlexCAN_Ip_example *******************************************************************************/ /* 包括必要的配置文件。*/ #include "Mcal.h" #include "Clock_Ip.h" #include "FlexCAN_Ip.h" #include "IntCtrl_Ip.h" #include "Siul2_Port_Ip_Cfg.h" #include "Siul2_Dio_Ip_Cfg.h" #include "Siul2_Dio_Ip.h" #include "Siul2_Port_Ip.h" #include "OsIf.h" #define MSG_ID 20u #define RX_MB_IDX 1U #define TX_MB_IDX 0U volatile int exit_code = 0 ; /* 用户包含 */ Flexcan_Ip_DataInfoType tx_info = { .msg_id_type = FLEXCAN_MSG_ID_STD ,​ . data_length = 1u ,​ .fd_enable = FALSE ,​ .fd_padding = FALSE ,​ .enable_brs = FALSE ,​ is_polling = FALSE ,​ is_remote = FALSE​ } ; Flexcan_Ip_DataInfoType rx_info = { .msg_id_type = FLEXCAN_MSG_ID_STD ,​ . data_length = 1u ,​ .fd_enable = FALSE ,​ .fd_padding = FALSE ,​ .enable_brs = FALSE ,​ is_polling = FALSE ,​ is_remote = FALSE​ } ; Flexcan_Ip_MsgBuffType rxData ; uint8 dummyData [ 8 ] ; volatile uint32 g_canErrorStatus = 0 ; /* 用于调试器监视的实时 ESR1 快照 */ volatile Flexcan_Ip_StatusType g_tja1153Status [ 3 ] ; /* [0]=自动波特率,[1]=FEC白名单,[2]=退出配置*/ /*! \brief 项目的主要功能。 详细信息:启动初始化顺序如下: * - 启动汇编例程 * - 主要的() */ extern void CAN0_ORED_0_31_MB_IRQHandler ( void ) ; void setupCanXCVR_TJA1153 ( void ) ; static void CAN_DelayMs ( uint32 ms ) { uint32 ticks = OsIf_MicrosToTicks ( ms * 1000 U , FLEXCAN_IP_SERVICE_TIMEOUT_TYPE ) ; uint32 start = OsIf_GetCounter ( FLEXCAN_IP_SERVICE_TIMEOUT_TYPE ) ; uint32 elapsed = 0 U ; 当(经过时间<刻度) { elapsed += OsIf_GetElapsed ( & start , FLEXCAN_IP_SERVICE_TIMEOUT_TYPE ) ; } } void flexcan0_Callback ( uint8 instance , Flexcan_Ip_EventType eventType , uint32 buffIdx , const Flexcan_Ip_StateType * flexcanState ) { ( void ) flexcanState ; ( void )实例; 切换(事件类型) { case FLEXCAN_EVENT_RX_COMPLETE : dummyData [ 0 ] ++; 如果( buffIdx == 1 ) // 已接收 MB1 { FlexCAN_Ip_Send ( INST_FLEXCAN_0 , TX_MB_IDX , & tx_info , rxData . msgId ,( uint8 * ) & dummyData ) ; FlexCAN_Ip_Receive ( INST_FLEXCAN_0 , RX_MB_IDX , & rxData , false ) ; } 休息; case FLEXCAN_EVENT_RXFIFO_COMPLETE : 休息; case FLEXCAN_EVENT_TX_COMPLETE : 休息; case FLEXCAN_EVENT_ENHANCED_RXFIFO_COMPLETE : 休息; case FLEXCAN_EVENT_ENHANCED_RXFIFO_WATERMARK : 休息; 默认: 休息; } } void setupCanXCVR_TJA1153 ( void ) { /** * 与大多数 CAN 收发器不同,TJA1153 收发器并非即插即用。 如果之前没有配置过,则初始时进入配置模式。 * 在此初始状态下,它已准备好接收额外的网络安全 例如 TPL/BBL 之类的装置。 * * 在此示例中,它将 TPL 设置为传递所有标准和扩展ID,并且不阻止任何消息。 * 下总线。最后退出配置模式,未写入非易失性数据。 * 既不锁定收发器,也不存储内存。 * * 有关更多详细信息,请参阅 NXP 的 TJA1153 数据手册。 * */ #define TJA1153_START_ID (uint32_t)(0x555u) #define TJA1153_CONFIG_ID (uint32_t)(0x18DA00F1u) uint8 sendData [ 8 ] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ; uint32_t错误; /* 允许通过 TXD 引脚从本地主机配置 CAN0 收发器,STB = 0 (PTC20) */ Siul2_Dio_Ip_WritePin ( PTC_H_HALF , 4 , 0 U ) ; CAN_DelayMs ( 1000 ) ; /* 自动比特率检测初始 CAN Classic 帧,ID 为 0x555,适用于 CAN0 */ tx_info.is_polling = TRUE ;​​ tx_info.msg_id_type = FLEXCAN_MSG_ID_STD ;​​ tx_info.data_length = 8 ;​​ g_tja1153Status [ 0 ] = FlexCAN_Ip_SendBlocking ( INST_FLEXCAN_0 , TX_MB_IDX , & tx_info , TJA1153_START_ID , sendData , 1000 ) ; /* 用于设置传输白名单的滤波器元件配置 (FEC) 帧。 * 注意:ID_TX 是 NXP 参考示例的占位符 (0xC0FFEE),而不是 MSG_ID - * 此操作仅将该单个扩展 ID列入白名单。请先确认此基本方法有效。 然后根据 TJA1153数据手册,根据您的实际 ID 调整 ID_TX/Extended_Filter_Config。 { uint32_t ID_Stinger = TJA1153_CONFIG_ID ; uint32_t PAYLOAD_FEC [ 2 ] ; uint8_t COMMAND_BYTE_FEC = 0x10 ; uint8_t Filter_Element_Index_0 = 0 ; uint8_t Filter_Element_Type = 1 ; uint8_t Extended_Filter_Config = 3 ; /* TWL 和 BBL 都适用 */ uint32_t ID_TX = 0xC0FFEE ; uint32_t Filter_Element_Contents = ( Extended_Filter_Config << 29 ) | ID_TX ; PAYLOAD_FEC [ 0 ] = ( COMMAND_BYTE_FEC << 24 ) | ( Filter_Element_Index_0 << 16 ) | (筛选元素类型<< 15 ) | (筛选元素内容>> 16 ) PAYLOAD_FEC [ 1 ] = ( Filter_Element_Contents & 0xFFFF ) << 16 ; sendData [ 0 ] = ( uint8 )( ( PAYLOAD_FEC [ 0 ] >> 24 ) & 0xFFU ) ; sendData [ 1 ] = ( uint8 )( ( PAYLOAD_FEC [ 0 ] >> 16 ) & 0xFFU ) ; sendData [ 2 ] = ( uint8 )(( PAYLOAD_FEC [ 0 ] >> 8 ) & 0xFF U ) ; sendData [ 3 ] = ( uint8 ) ( PAYLOAD_FEC [ 0 ] & 0xFFU ) ; sendData [ 4 ] = ( uint8 )( ( PAYLOAD_FEC [ 1 ] >> 24 ) & 0xFFU ) ; sendData [ 5 ] = ( uint8 )(( PAYLOAD_FEC [ 1 ] >> 16 ) & 0xFF U ) ; tx_info.msg_id_type = FLEXCAN_MSG_ID_EXT ;​​ tx_info.data_length = 6 ;​​ g_tja1153Status [ 1 ] = FlexCAN_Ip_SendBlocking ( INST_FLEXCAN_0 , TX_MB_IDX , & tx_info , ID_Stinger , sendData , 1000 ) ; CAN_DelayMs ( 5 ) ; } /* 退出配置模式的最后一个命令帧,无需写入非易失性存储器或非 * 锁定收发器,即开发模式*/ sendData [ 0 ] = 0x71 ; // 命令字节 sendData [ 1 ] = 0x2 ; sendData [ 2 ] = 0x3 ; sendData [ 3 ] = 0x4 ; sendData [ 4 ] = 0x5 ; sendData [ 5 ] = 0x6 ; sendData [ 6 ] = 0x7 ; sendData [ 7 ] = 0x8 ; tx_info.msg_id_type = FLEXCAN_MSG_ID_EXT ;​​ tx_info.data_length = 8 ;​​ g_tja1153Status [ 2 ] = FlexCAN_Ip_SendBlocking ( INST_FLEXCAN_0 , TX_MB_IDX , & tx_info , TJA1153_CONFIG_ID , sendData , 1000 ) ; /* 最后一帧结束后,收发器退出配置模式并进入待机模式,退出 * 将 CAN0 收发器的 STB 引脚设置为高电平(引脚反接)即可切换到正常工作模式 */ Siul2_Dio_Ip_WritePin ( PTC_H_HALF , 4 , 1 U ) ; CAN_DelayMs ( 1000 ) ; errors = FlexCAN_Ip_GetErrorStatus ( INST_FLEXCAN_0 ) ; FlexCAN_Ip_ClearErrorStatus ( INST_FLEXCAN_0 , errors ) ; } int main ( void ) { /* 在这里编写你的代码 */ Clock_Ip_Init ( & Clock_Ip_aClockConfig [ 0 ]) ; Siul2_Port_Ip_Init ( NUM_OF_CONFIGURED_PINS0 , g_pin_mux_InitConfigArr0 ) ; IntCtrl_Ip_EnableIrq ( FlexCAN0_1_IRQn ) ; IntCtrl_Ip_InstallHandler ( FlexCAN0_1_IRQn , CAN0_ORED_0_31_MB_IRQHandler , NULL_PTR ) ; FlexCAN_Ip_Init ( INST_FLEXCAN_0 , & FlexCAN_State0 , & FlexCAN_Config0 ) ; FlexCAN_Ip_SetRxMaskType_Privileged ( INST_FLEXCAN_0 , FLEXCAN_RX_MASK_INDIVIDUAL ) ; FlexCAN_Ip_SetRxIndividualMask_Privileged(INST_FLEXCAN_0,RX_MB_IDX,0x0<<18); // 清除掩码寄存器以允许接收所有STDID FlexCAN_Ip_SetStartMode ( INST_FLEXCAN_0 ) ; setupCanXCVR_TJA1153 () ; tx_info.is_polling = FALSE ;​​ tx_info.msg_id_type = FLEXCAN_MSG_ID_STD ;​​ tx_info.data_length = 8 ;​​ tx_info.fd_enable = false ;​​ tx_info.enable_brs = false ;​​ FlexCAN_Ip_ConfigRxMb ( INST_FLEXCAN_0 , RX_MB_IDX , & rx_info , MSG_ID ) ; FlexCAN_Ip_Receive ( INST_FLEXCAN_0 , RX_MB_IDX , & rxData , false ) ; FlexCAN_Ip_Send ( INST_FLEXCAN_0 , TX_MB_IDX , & tx_info , MSG_ID , ( uint8 * ) & dummyData ) ; 当( 1 ) { g_canErrorStatus = FlexCAN_Ip_GetErrorStatus ( INST_FLEXCAN_0 ) ; } 返回0 ; } /* 主程序结束 */ /*! ** @} */ Re: S32K358 EVK board CAN not working 你好@ Yash2530 附件包含我对 RTD 版本 3.0.0 进行的测试。您可以参考 P07。 Re: S32K358 EVK board CAN not working 嗨Senlent , Can 传输 TX 工作正常,我能够从 NXP 接收数据到 Waveshare USB CAN 设备,但 RX 似乎无法工作。 我发送的 id 为 0x001,数据为 01 01 01 01 01 01 01 01。 我是不是漏掉了什么?或者您提供的代码只适用于TX? Re: S32K358 EVK board CAN not working 你好@Senlent , 请分享一个RX和TX都能正常工作的演示示例。 问候, 亚什·古普塔 Re: S32K358 EVK board CAN not working 你好@ Yash2530 是的,这个演示只是为了向您展示发送功能是否正常工作;它不包含任何接收功能。
記事全体を表示
TJA1050,CAN总线丢失 你好, 我们有一款使用TJA1050的产品,其原理图如下。 我们发现测试过程中存在高频 CAN 丢包。操作过程中丢失了一两帧。 公交车载客率约为 16%。 我已在下方附上硬件原理图和CAN总线丢包数据。 问题 1. CAN 总线丢失的可能根本原因是什么? 2. 硬件原理图是否存在任何问题? 3. 下一步我可以采取什么行动 如有必要,我可以进行更多测试或提供更多信息。感谢您的支持。 Re: TJA1050, CAN loss 1:如果您的板不在总线末端,建议先断开 DR6/DR7 连接,或将其更换为可选的跳线。 2:为了测试目的,请移除DR8/DR9/DD1/DD2 3:隔离器SI8421的数据速率和传播延迟是否满足CAN位时序裕量。
記事全体を表示
S32K344 FreeRTOS example fails to link Hello; I'm just starting out with the S32K344 EVK (S32K344MINI-EVB) and am using the IDE 3.6.5 with FreeRTOS 7.0.0 (D2511) that came in the FRDM automotive bundle created by the package manager. I'm trying to build one of the provided sample applications for the 344, via the "S32DS Project from Example", the FreeRTOS_Toggle_Led_Example_S32K344.. I've use the ConfigTools to Update Code, but so far that's the only modification to the code that I've made. But out of the box the code fails at the link stage: c:/nxp/s32ds.3.6.5/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/bin/real-ld.exe: ./FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.o: in function `vPortStoreTaskMPUSettings': C:\Workspaces-35\FreeRTOS_Toggle_Led_Example_S32K344\Debug_FLASH/../FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.c:1890: undefined reference to `__FreeRTOS_code_data_start__' c:/nxp/s32ds.3.6.5/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/bin/real-ld.exe: C:\Workspaces-35\FreeRTOS_Toggle_Led_Example_S32K344\Debug_FLASH/../FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.c:1890: undefined reference to `__FreeRTOS_code_data_end__' c:/nxp/s32ds.3.6.5/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/bin/real-ld.exe: ./FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.o: in function `prvSetupMPU': C:\Workspaces-35\FreeRTOS_Toggle_Led_Example_S32K344\Debug_FLASH/../FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.c:1723: undefined reference to `__FreeRTOS_code_data_end__' c:/nxp/s32ds.3.6.5/s32ds/build_tools/gcc_v10.2/gcc-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/bin/real-ld.exe: C:\Workspaces-35\FreeRTOS_Toggle_Led_Example_S32K344\Debug_FLASH/../FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.c:1723: undefined reference to `__FreeRTOS_code_data_start__' I assume these are linker sections, but they do not appear to be defined anywhere inside either the sample code, the FreeRTOS folder inside the package, or elsewhere. Are the "S32DS Project from Example" sample projects outdated? Or is there a simple fix to this issue that I'm missing? Thanks in advance, Joe Shidle Re: S32K344 FreeRTOS example fails to link Hi Joe Shidle, Sorry for the inconvenience we bring you! I was able to reproduce the issue where example does not build correctly because of Ld errors, and their solution is correct: Root cause: MPU is enabled by default in the S32CT. This causes code generator to emit MPU-aware code (including references to the FreeRTOS MPU linker symbols). However, the linker script for the Toggle_Led_Example_S32K344 (linker_flash_s32k344.ld) does not define these MPU memory regions or their boundary symbols — those are only present in MPU-specific examples (e.g., FreeRTOS_MPU_Example_S32K389/linker_flash_s32k389.ld). The mismatch between the generated code expecting MPU symbols and the non-MPU linker script causes the undefined reference errors. Disabling 'use mpu' makes the example compile correctly: Side effect note: Disabling MPU by default means users who need MPU must explicitly enable it in S32CT and configure the memory regions. Best Regards, Robin
記事全体を表示
S32K3X4EVB-Q257開発ボードのK26ファームウェアは存在しません。 私のS32K3X4EVB-Q257開発ボードのOpenSDAが動作しません。すでにPEmicroドライバーをインストールしましたが、私のパソコンのデバイスマネージャーではOpenSDAが認識されません。K26のファームウェアが欠落していることが原因だと確信しています。そのファームウェアを教えてもらえますか? Re: The K26 firmware on the S32K3X4EVB-Q257 development board is missing. D+やD-信号付きのUSBケーブルに交換しても問題が続く場合は、PEMicroの技術サポートに連絡することをお勧めします。https://www.pemicro.com/support/index.cfm Re: The K26 firmware on the S32K3X4EVB-Q257 development board is missing. 私の開発ボードにはK26チップが搭載されており、オンボードのデバッガを認識できませんPEFirmwareConfig.exe。K26のOpenSDAファームウェアが明らかに欠落している。 Re: The K26 firmware on the S32K3X4EVB-Q257 development board is missing. ハイ まず、U63のK26がはんだ付けされているかどうかを確認してください。K26がはんだ付けされていない開発ボードの一括があり、K26が不足していたため、外部デバッガを使わざるを得ませんでした。 次に、 USBマルチリンクリソースのインストール マルチリンクデバッグプローブから。USBハブを使わずに、USBをS32K3X4EVB-Q257のJ55に接続します。オンボードデバッガは PEFirmwareConfig.exeで認識できますか? よろしくお願いいたします ロビン
記事全体を表示
S32K344 FreeRTOS サンプルはリンクに失敗します こんにちは; 私はS32K344 EVK(S32K344MINI-EVB)を始めたばかりで、IDE 3.6.5とFreeRTOS 7.0.0を使っています(D2511)は、パッケージマネージャーによって作成されたFRDM自動車バンドルに含まれていました。 私は「S32DS Project from Example」という344用のサンプルアプリケーションの一つを作ろうとしています。FreeRTOS_Toggle_Led_Example_S32K344... ConfigToolsを使ってコードを更新したことはありますが、今のところそれだけがコードの修正です。 しかし、そのままの状態では、コードはリンク段階で失敗します。 c:/nxp/s32ds.3.6.5/s32ds/build_tools/gcc_v10.2/GCC-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/bin/real-ld.exe:./FreeRTOS/Source/ポータブル/GCC/ARM_CM7/r0p1/port.o: in function 'vPortStoreTaskMPUSettings': C:\Workspaces-35\FreeRTOS_Toggle_Led_Example_S32K344\Debug_FLASH/../FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.c:1890:未定義の「__FreeRTOS_code_data_start__」参照 c:/nxp/s32ds.3.6.5/s32ds/build_tools/gcc_v10.2/GCC-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/bin/real-ld.exe:C:\Workspaces-35\FreeRTOS_Toggle_Led_Example_S32K344\Debug_FLASH/../FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.c:1890: 「__FreeRTOS_code_data_end__」に関する未定義の参照 c:/nxp/s32ds.3.6.5/s32ds/build_tools/gcc_v10.2/GCC-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/bin/real-ld.exe:./FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.o: 関数 'prvSetupMPU': C:\Workspaces-35\FreeRTOS_Toggle_Led_Example_S32K344\Debug_FLASH/../FreeRTOS/Source/portable/GCC/ARM_CM7/r0p1/port.c:1723: 「__FreeRTOS_code_data_end__」に関する未定義の参照 c:/nxp/s32ds.3.6.5/s32ds/build_tools/gcc_v10.2/GCC-10.2-arm32-eabi/bin/../lib/gcc/arm-none-eabi/10.2.0/../../../../arm-none-eabi/bin/real-ld.exe:C:\Workspaces-35\FreeRTOS_Toggle_Led_Example_S32K344\Debug_FLASH/../FreeRTOS/Source/ポータブル/GCC/ARM_CM7/r0p1/port.c:1723:未定義の「__FreeRTOS_code_data_start__」参照 これらはリンカーセクションだと思いますが、サンプルコード内やパッケージ内のFreeRTOSフォルダ、その他の場所のどこにも定義されていないようです。 「S32DSプロジェクト例」のサンプルプロジェクトは古くなっていますか?それとも、私が気づいていない簡単な解決策があるのでしょうか? 前もって感謝します、 ジョー・シドル Re: S32K344 FreeRTOS example fails to link こんにちは、ジョー・シドルさん。 ご迷惑をおかけして申し訳ございません! Ldエラーが原因でサンプルが正しくビルドされないという問題を再現できました。そして、彼らの解決策は正しいものでした。 根本原因:S32CTではMPUがデフォルトで有効になっています。これにより、コードジェネレータはMPU対応コード(FreeRTOS MPUリンカーシンボルへの参照を含む)を出力するようになります。しかし、 Toggle_Led_Example_S32K344のリンカー スクリプト (linker_flash_s32k344.ld) では、これらの MPU メモリ領域やその境界シンボルは定義されていません。これらは MPU 固有のサンプル (例: FreeRTOS_MPU_Example_S32K389/linker_flash_s32k389.ld) にのみ存在します。MPUシンボルを想定して生成されたコードと、MPU非対応のリンカスクリプトとの間の不一致が、未定義参照エラーの原因となります。 「use mpu」を無効にすると、サンプルが正しくコンパイルされます。 副次的な注意:MPUをデフォルトで無効にすると、MPUが必要なユーザーはS32CTで明示的にMPUを有効にし、メモリ領域を設定する必要があります。 よろしくお願いいたします ロビン
記事全体を表示
受信感度は連続測定間で10dBの差がある。 QN9083 BLE SoCを使用している当社の製品の一つで予期せぬ挙動を観察しています。機器のレシーバ感度を測定すると、連続した測定間で最大10dBの差が見られます。CMW100を広告モードで測定しており、機器はシールドされたRFボックスに設置されています。箱を開けたり、デバイスの設置場所を変更したりせずに、連続してRxS測定を行ったところ、デバイスは最大10dBの差(-91dBmと-81dBm)を示しました。これは予想外で、これまで一度も発生したことのない現象です。その挙動はランダムである。ハードウェアとソフトウェアの両方の可能な原因を探しています。
記事全体を表示
Which USB to power the FRDM-MCXA153 when using external MCU Link Debug Probe? Hello, I am new to NXP microcontrollers and the MCUxpresso IDE. I have purchased the FRDM-MCXA153 and also the MCU-Link Debug Probe. I want to use the external debug probe because that is what I will use on my custom printed circuit board. I have gotten the Blinky LED example code working and with using the external debug port J18 with the MCU-Link Debug Probe. My question is which USB connector on the FRDM board should I use to power the board J18 or J8 while I an using the external debugger? Thank you Development Board
記事全体を表示
S32K358 EVKボードのCANが動作しません こんにちは、 S32K3x8EV8ボードのCAN0またはCAN1を使うコードを実行しようとしていますが、できません。しかしCANは全く動作せず、Waveshare USB-CAN-AでCANメッセージを読み取ろうとしています。 コードも貼り付けました。CAN設定のスクリーンショットを追加してください。 /* * 著作権 2019 NXP * * 無断転載を禁じます。 * * このソフトウェアはNXPによって「現状通り」および明示されたものまたは * 黙示の保証(黙示の保証を含むが、これに限定されない) * 商品性および特定目的への適合性に関する保証は一切いたしません。 * いかなる場合もNXPまたはその寄付者は、いかなる直接的な責任も負いません。 * 間接的、偶発的、特別、懲罰的、または結果的な損害 * (代替品の調達を含むがこれに限定されない) * サービス、使用不能、データ損失、利益損失、または事業中断) * 原因の如何を問わず、また契約に基づくか否かを問わず、いかなる責任理論に基づく場合であっても、 * 厳格責任、または不法行為(過失その他を含む)の発生 * 本ソフトウェアのいかなる形でも、たとえ助言されていても使用しないでください * そのような損害が発生する可能性。 */ /* ################################################################### ******************************************************************************** * ファイル: main.c * オーナー:ペトル・スタンチク * バージョン: 1.0 * 日付: 2024年10月22日 * 分類:一般ビジネス情報 * 概要:FlexCAN TX/RX ISRテスト * ******************************************************************************** ******************************************************************************** このデモアプリケーションの目的は、FlexCANモジュールの使い方を示すことです S32 RTD APIを用いてCAN FDを使用するよう設定されています。 - このデモアプリケーションは2枚のボード、またはCANツールに接続された1枚のボードを必要とします。 - CAN FDはビットレート500/2000 kbpsで有効です - FlexCAN0モジュールとそのトランシーバ(TJA1153)を構成します。 - MB0はCANFD標準IDの送信に使用されます。 MB1は任意の標準IDを受信するように構成されています。 - コールバック関数は、MBにおけるTXおよびRXプロセスを処理するためにも使用されます。受信したIDは 反響した。 - setupCanXCVR関数はInitに呼び出されTJA1153ボード上のFlexCAN0に接続されます。 トランシーバをバニラ状態にすることを期待し、TPLがすべてのstdおよびext IDを通過するように設定しています。 バスから届くメッセージを遮断しないでください。最後に設定モードを終了します 不揮発性メモリへの書き込みやトランシーバのロックなしに。 * * ------------------------------------------------------------------------------ * テスト用ハードウェア: S32K3X8EVB-Q289 rev B2 * MCU:P32K358HVS 0P14E * コンパイラ:S32DS。ARM.3.5 * SDK リリース:S32K3_RTD_4.0.0_D2311 * デバッガー: Lauterbach * 対象: internal_FLASH * ******************************************************************************** 変更履歴: 1.0 2024年10月22日Petr Stancik RTD FlexCAN_Ip_exampleに基づく初期バージョン *******************************************************************************/ /* 必要な設定ファイルを含めます。*/ #include "Mcal.h" #include "Clock_Ip.h" #include "FlexCAN_Ip.h" #include "IntCtrl_Ip.h" #include "Siul2_Port_Ip_Cfg.h" #include "Siul2_Dio_Ip_Cfg.h" #include "Siul2_Dio_Ip.h" #include "Siul2_Port_Ip.h" #include "OsIf.h" #define MSG_ID 20u #define RX_MB_IDX 1U #define TX_MB_IDX 0U volatile int exit_code = 0 ; /* ユーザーには */ が含まれています Flexcan_Ip_DataInfoType tx_info = { . msg_id_type = FLEXCAN_MSG_ID_STD 、 . data_length = 1 u 、 . fd_enable = FALSE 、 . fd_padding = FALSE 、 .enable_brs = FALSE 、​ . is_polling = FALSE 、 . is_remote = FALSE } ; Flexcan_Ip_DataInfoType rx_info = { . msg_id_type = FLEXCAN_MSG_ID_STD 、 . data_length = 1 u 、 . fd_enable = FALSE 、 . fd_padding = FALSE 、 .enable_brs = FALSE 、​ . is_polling = FALSE 、 . is_remote = FALSE } ; Flexcan_Ip_MsgBuffType rxData ; uint8 dummyData [ 8 ] ; volatile uint32 g_canErrorStatus = 0 ; /* デバッガ監視用のライブ ESR1 スナップショット */ volatile Flexcan_Ip_StatusType g_tja1153Status[3]; /* [0]=auto-baud, [1]=FEC whitelist, [2]=exit config */ /*! \brief プロジェクトの主な機能。 \details 起動時の初期化シーケンスは以下のとおりです。 * - スタートアップアセンブリルーチン * - 主要() */ extern void CAN0_ORED_0_31_MB_IRQHandler ( void ) ; void setupCanXCVR_TJA1153 ( void ) ; static void CAN_DelayMs ( uint32 ms ) { uint32 ticks = OsIf_MicrosToTicks ( ms * 1000 U , FLEXCAN_IP_SERVICE_TIMEOUT_TYPE ) ; uint32 start = OsIf_GetCounter ( FLEXCAN_IP_SERVICE_TIMEOUT_TYPE ) ; uint32 elapsed = 0 U ; while (経過時間< ticks ) { elapsed += OsIf_GetElapsed ( & start , FLEXCAN_IP_SERVICE_TIMEOUT_TYPE ) ; } } void flexcan0_Callback ( uint8 instance , Flexcan_Ip_EventType eventType , uint32 buffIdx , const Flexcan_Ip_StateType * flexcanState ) { ( void ) flexcanState ; ( void )インスタンス; switch(eventType) { CASE FLEXCAN_EVENT_RX_COMPLETE: dummyData [ 0 ] ++; if ( buffIdx == 1 ) // MB1 を受信 { FlexCAN_Ip_Send ( INST_FLEXCAN_0 、 TX_MB_IDX 、 & tx_info 、 rxData . msgId 、( uint8 * ) & dummyData ) ; FlexCAN_Ip_Receive ( INST_FLEXCAN_0 , RX_MB_IDX , & rxData , false ) ; } 壊す; CASE FLEXCAN_EVENT_RXFIFO_COMPLETE: 壊す; CASE FLEXCAN_EVENT_TX_COMPLETE: 壊す; CASE FLEXCAN_EVENT_ENHANCED_RXFIFO_COMPLETE: 壊す; CASE FLEXCAN_EVENT_ENHANCED_RXFIFO_WATERMARK: 壊す; デフォルト: 壊す; } } void setupCanXCVR_TJA1153 ( void ) { /** * TJA1153トランシーバは、ほとんどのCANトランシーバのようにすぐに使える状態ではない * 以前に設定されていない場合は、最初に設定モードに入ります。 * この初期状態では、追加のセキュリティを受ける準備ができています * 例えば、TPL/BBLのようなセットアップ。 * この例では、TPL はすべての標準 IDと外部ID を渡すように設定され、メッセージをブロックしません。 * バスから降りてきたところ。最後に、不揮発性メモリに書き込まずに設定モードを終了します。 * メモリもトランシーバのロックもしない。 * * 詳細については、NXP社のTJA1153データシートを参照してください。 * */ #define TJA1153_START_ID (uint32_t)(0x555u) #define TJA1153_CONFIG_ID (uint32_t)(0x18DA00F1u) uint8 sendData [ 8 ] = { 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 } ; uint32_tエラー; /* ローカルホストから TXD ピン経由で CAN0 トランシーバの設定を許可、STB = 0 (PTC20) */ Siul2_Dio_Ip_WritePin ( PTC_H_HALF , 4 , 0 U ) ; CAN_DelayMs ( 1000 ) ; 自動ビットレート検出 初期CANクラシックフレーム(ID 0x555 CAN0 */ tx_info.is_polling = TRUE ;​​ tx_info.msg_id_type = FLEXCAN_MSG_ID_STD ;​​ tx_info.data_length = 8 ;​​ g_tja1153Status [ 0 ] = FlexCAN_Ip_SendBlocking ( INST_FLEXCAN_0 , TX_MB_IDX , & tx_info , TJA1153_START_ID , sendData , 1000 ) ; /* 送信ホワイトリストを設定するためのフィルタ要素構成 (FEC) フレーム。 * 注: ID_TX は NXP リファレンス サンプルのプレースホルダー (0xC0FFEE) であり、MSG_ID ではありません。 * これは単一の拡張 ID のみをホワイトリストに登録します。まずこのベースラインが機能することを確認してください。 * 次に、TJA1153データシートに従って、実際のIDに合わせてID_TX/Extended_Filter_Configを調整してください。*/ { uint32_t ID_Stinger = TJA1153_CONFIG_ID ; uint32_t PAYLOAD_FEC [ 2 ] ; uint8_t COMMAND_BYTE_FEC = 0x10 ; uint8_t Filter_Element_Index_0 = 0 ; uint8_t Filter_Element_Type = 1 ; uint8_t Extended_Filter_Config = 3 ; /* TWLとBBLの両方 */ uint32_t ID_TX = 0xC0FFEE ; uint32_t Filter_Element_Contents = ( Extended_Filter_Config << 29 ) | ID_TX ; PAYLOAD_FEC [ 0 ] = ( COMMAND_BYTE_FEC << 24 ) | ( Filter_Element_Index_0 << 16 ) | ( Filter_Element_Type << 15 ) | ( Filter_Element_Contents >> 16 ) ; PAYLOAD_FEC [ 1 ] = ( Filter_Element_Contents & 0xFFFF ) << 16 ; sendData [ 0 ] = ( uint8 )(( PAYLOAD_FEC [ 0 ] >> 24 ) & 0xFF U ) ; sendData [ 1 ] = ( uint8 )(( PAYLOAD_FEC [ 0 ] >> 16 ) & 0xFF U ) ; sendData [ 2 ] = ( uint8 )(( PAYLOAD_FEC [ 0 ] >> 8 ) & 0xFF U ) ; sendData [ 3 ] = ( uint8 )( PAYLOAD_FEC [ 0 ] & 0xFF U ) ; sendData [ 4 ] = ( uint8 )(( PAYLOAD_FEC [ 1 ] >> 24 ) & 0xFF U ) ; sendData [ 5 ] = ( uint8 )(( PAYLOAD_FEC [ 1 ] >> 16 ) & 0xFF U ) ; tx_info.msg_id_type = FLEXCAN_MSG_ID_EXT ;​​ tx_info.data_length = 6 ;​​ g_tja1153Status [ 1 ] = FlexCAN_Ip_SendBlocking ( INST_FLEXCAN_0 , TX_MB_IDX , & tx_info , ID_Stinger , sendData , 1000 ) ; CAN_DelayMs ( 5 ) ; } /* 不揮発性メモリに書き込まずに構成モードを終了するための最後のコマンドフレーム * トランシーバをロックする、すなわち開発モード */ sendData [ 0 ] = 0x71 ; // コマンドバイト sendData [ 1 ] = 0x2 ; sendData [ 2 ] = 0x3 ; sendData [ 3 ] = 0x4 ; sendData [ 4 ] = 0x5 ; sendData [ 5 ] = 0x6 ; sendData [ 6 ] = 0x7 ; sendData [ 7 ] = 0x8 ; tx_info.msg_id_type = FLEXCAN_MSG_ID_EXT ;​​ tx_info.data_length = 8 ;​​ g_tja1153Status [ 2 ] = FlexCAN_Ip_SendBlocking ( INST_FLEXCAN_0 , TX_MB_IDX , & tx_info , TJA1153_CONFIG_ID , sendData , 1000 ) ; /* 最後のフレーム終了後、トランシーバは設定モードを終了し、スタンバイモードに入り、終了します * 通常動作モードへの切り替えは、CAN0トランシーバのSTBピンをHIGHに設定することで行われます(ピンは無効化) */ Siul2_Dio_Ip_WritePin ( PTC_H_HALF , 4 , 1 U ) ; CAN_DelayMs ( 1000 ) ; errors = FlexCAN_Ip_GetErrorStatus ( INST_FLEXCAN_0 ) ; FlexCAN_Ip_ClearErrorStatus ( INST_FLEXCAN_0 , errors ) ; } int main ( void ) { /* ここにコードを記述してください */ Clock_Ip_Init ( & Clock_Ip_aClockConfig [ 0 ]) ; Siul2_Port_Ip_Init ( NUM_OF_CONFIGURED_PINS0 , g_pin_mux_InitConfigArr0 ) ; IntCtrl_Ip_EnableIrq ( FlexCAN0_1_IRQn ) ; IntCtrl_Ip_InstallHandler ( FlexCAN0_1_IRQn , CAN0_ORED_0_31_MB_IRQHandler , NULL_PTR ) ; FlexCAN_Ip_Init ( INST_FLEXCAN_0 , & FlexCAN_State0 , & FlexCAN_Config0 ) ; FlexCAN_Ip_SetRxMaskType_Privileged ( INST_FLEXCAN_0 , FLEXCAN_RX_MASK_INDIVIDUAL ) ; FlexCAN_Ip_SetRxIndividualMask_Privileged ( INST_FLEXCAN_0 , RX_MB_IDX , 0x0 << 18 ) ; // マスクレジスタをクリアして、すべての標準IDを受信できるようにします FlexCAN_Ip_SetStartMode ( INST_FLEXCAN_0 ) ; setupCanXCVR_TJA1153 () ; tx_info.is_polling = FALSE ;​​ tx_info.msg_id_type = FLEXCAN_MSG_ID_STD ;​​ tx_info.data_length = 8 ;​​ tx_info.fd_enable = false ;​​ tx_info.enable_brs = false ;​​ FlexCAN_Ip_ConfigRxMb ( INST_FLEXCAN_0 , RX_MB_IDX , & rx_info , MSG_ID ) ; FlexCAN_Ip_Receive ( INST_FLEXCAN_0 , RX_MB_IDX , & rxData , false ) ; FlexCAN_Ip_Send ( INST_FLEXCAN_0 , TX_MB_IDX , & tx_info , MSG_ID , ( uint8 * ) & dummyData ) ; ( 1 )​ { g_canErrorStatus = FlexCAN_Ip_GetErrorStatus ( INST_FLEXCAN_0 ) ; } 0を返す; } /* メイン処理終了 */ /*! ** @} */ Re: S32K358 EVK board CAN not working こんにちは、@ Yash2530 添付ファイルには、RTDバージョン3.0.0で実施したテスト結果が含まれています。P07を参照してください。 Re: S32K358 EVK board CAN not working こんにちは 、Senlentさん。 Canの送信は動作しており、NXPからWaveshareのUSB CANデバイスへのデータ受信は可能ですが、RXは動作していないようです。 IDとして0x001、データとして01 01 01 01 01 01 01 01を送信します。 何か見落としている点があるのでしょうか、それとも提供されたコードはTX専用なのでしょうか。 Re: S32K358 EVK board CAN not working こんにちは、@ Yash2530 はい、このデモは送信機能が正しく動作しているかどうかを確認するためのものであり、受信機能は含まれていません。 Re: S32K358 EVK board CAN not working こんにちは、 @Senlent さん。 RXとTXの両方が正常に動作しているデモを一つ共有してください。 よろしくお願いいたします。 ヤシュ・グプタ
記事全体を表示
TJA1050、CANロス こんにちは、 製品TJA1050 TJA1050の中古品があり、回路図は以下の通りです。 検査中に高周波のCAN損失があることがわかりました。動作中に1~2フレームが失われました。 バスの乗車率は約16%です。 以下にハードウェアの回路図とCAN損失データを添付しました。 質問 1. CAN損失の根本原因は何でしょうか? 2. ハードウェア回路図に何か問題はありますか? 3. 次のステップで私ができること 必要に応じて、もっとテストを試したり、情報を提供したりできます。ご支援ありがとうございます。 Re: TJA1050, CAN loss 1:このボードがバスの終端にない場合は、まずDR6/DR7を切断するか、オプションのジャンパーに変更することをお勧めします。 2:テスト目的でDR8/DR9/DD1/DD2を削除してください 3: アイソレータSI8421のデータレートおよび伝搬遅延がCANビットタイミングマージンを満たすかどうか
記事全体を表示
连续两次测量中接收灵敏度相差 10dB 我发现我们一款使用 QN9083 BLE SoC 的产品出现了异常行为。当我测量设备接收器灵敏度时,我发现连续两次测量之间有高达 10dB 的差异。我正在使用 CMW100 的广播模式进行测量,该设备放置在屏蔽的射频盒中。在不打开盒子和/或改变设备位置的情况下,连续进行 RxS 测量,设备的响应差异高达 10dB(即 -91dBm 和 -81dBm),这是意料之外的,以前从未发生过。这种行为是随机的。我正在寻找硬件和软件方面可能的原因。
記事全体を表示
i.MX8MPLUS uSDHC HS400モード(ストロボ機能強化) HS400の強化ストロボを有効にするための推奨手順はありますか?MIX_CTRLレジスタのEN_HS400_MODEを設定するだけで十分でしょうか、それともSTROBE_DLL_CTRLレジスタに追加の変更が必要でしょうか? よろしくお願いいたします。 ステファン Re: i.MX8MPLUS uSDHC HS400 mode with enhanced strobe こんにちは、 @Stefan_CIT HS400ESでは、eMMC側とホスト側の両方で同時に設定を行う必要があります。EN_HS400_MODEを設定するだけでは、ホスト側の設定の一部に過ぎず、HS400拡張ストロボ機能を有効にするには不十分です。 Linux BSPを使っている場合、ドライバーは自動的にDLLとチューニングの設定を完成させます。 よろしくお願いします、 志明
記事全体を表示
外部MCUリンクデバッグプローブを使う場合、FRDM-MCXA153に電源を入れるUSBはどれですか? こんにちは、私はNXPのマイクロコントローラとMCUxpresso IDEは初心者です。FRDM-MCXA153とMCU-Linkデバッグプローブも購入しました。外部デバッグプローブを使用したいのは、自作のプリント基板でそれを使用する予定だからです。Blinky LEDの例コードを動作させ、外部デバッグポートJ18とMCU-Link Debug Probeを使って動作させました。 私の質問は、外部デバッガを使用している間、FRDMボードのJ18またはJ8に電源を供給するために、FRDMボード上のどのUSBコネクタを使用すればよいかということです。 よろしくお願い申し上げます。 開発ボード
記事全体を表示
使用外部MCU链路调试探针时,应该使用哪个USB接口为FRDM-MCXA153供电? 您好,我是 NXP 微控制器和 MCUxpresso IDE 的新手。我购买了 FRDM-MCXA153 和 MCU-Link 调试探针。我想使用外部调试探针,因为我将在我的定制印刷电路板上使用它。我已经成功运行了闪烁 LED 示例代码,并且可以使用 MCU-Link 调试探针通过外部调试端口 J18 进行调试。 我的问题是,在使用外部调试器时,我应该使用 FRDM 板上的哪个 USB 接口(J18 或 J8)为电路板供电? 谢谢 开发板
記事全体を表示
Rx sensitivity differs by 10dB between consecutive measurements I am observing unexpected behavior for one of our products using QN9083 BLE SoC. When I measure the device receiver sensitivity, I am seeing deltas up to 10dB between consecutive measurements. I am using a CMW100 in advertiser mode to perform measurement and the device is placed in a shielded RF box. Performing consecutive RxS measurements, without opening the box and/or changing device location, the device responds with up to 10dB difference (i.e., -91dBm and -81dBm) which is unexpected and never happened before. The behavior is random. I am looking for possible causes both hardware and software.
記事全体を表示
i.MX8MPLUS uSDHC HS400 mode with enhanced strobe Is there a recommended procedure to activate the enhanced strobe in HS400? Is it sufficient to set the EN_HS400_MODE in the MIX_CTRL register or does it need some additional modifications in the STROBE_DLL_CTRL register? Regards, Stefan Re: i.MX8MPLUS uSDHC HS400 mode with enhanced strobe Hi @Stefan_CIT  The HS400ES requires simultaneous configuration on both the eMMC and host sides. Setting EN_HS400_MODE alone is only part of the host-side configuration and is not sufficient to enable the HS400 Enhanced Strobe feature. If you are using Linux BSP, the driver automatically completes the DLL and tuning configurations. Best Regards, Zhiming
記事全体を表示