完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我们在我们的应用程序中使用 KE16F 微控制器。我想将 CAN 接口用于 ROM 引导加载程序。 第 23 章讨论 ROM 引导加载程序及其特性。 我正在尝试通过 CAN 接口访问 ROM 引导加载程序。我们正在使用一个定制板,我们已经对其硬件进行了彻底验证(已知 CAN 接口可以从应用程序代码中运行)。 我正在尝试使用以下设置配置引导加载程序: 比特率:125kHz Tx Id:0x270(引导加载程序向此 ID 发送响应消息) Rx Id:0x269(引导加载程序在此 ID 上接收命令消息) 我将“Flash Config”设置保留为默认设置: __attribute__ ((used,section(".FlashConfig"))) const struct { unsigned int word1; unsigned int word2; unsigned int word3; unsigned int word4; } Flash_Config = {0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFF7DFE};FLOPT = 0x7D 我相信这表明我们将进入引导加载程序是 NMI 引脚保持低电平。 我已经确认我可以通过断言 NMI(将其拉低)并按下重置按钮来进入引导加载程序。我已通过连接 J-Link 调试器检查处理器是否在 ROM 内存空间中运行。 我已经下载了 KinetisFlashTool 来为我们的设备生成 BCA。我使用了以下设置: typedef struct BootloaderConfiguration { uint32_t tag; //!< [00:03] Magic number to verify bootloader configuration is //! valid. Must be set to 'kcfg'. uint32_t crcStartAddress; //!< [04:07] Start address for application image CRC //! check. If the bits are all set then Kinetis //! bootloader by default will not perform any CRC //! check. uint32_t crcByteCount; //!< [08:0b] Byte count for application image CRC //! check. If the bits are all set then Kinetis //! bootloader by default will not prform any CRC check. uint32_t crcExpectedValue; //!< [0c:0f] Expected CRC value for application CRC //! check. If the bits are all set then Kinetis //! bootloader by default will not perform any CRC //! check. uint8_t enabledPeripherals; //!< [10:10] Bitfield of peripherals to enable. //! bit 0 - LPUART, bit 1 - I2C, bit 2 - SPI, //! bit 3 - CAN, bit 4 - USB //! Kinetis bootloader will enable the peripheral if //! corresponding bit is set to 1. uint8_t i2cSlaveAddress; //!< [11:11] If not 0xFF, used as the 7-bit I2C slave //! address. If 0xFF, defaults to 0x10 //! for I2C slave address. uint16_t peripheralDetectionTimeoutMs; //!< [12:13] Timeout in milliseconds //! for active peripheral detection. If //! 0xFFFF, defaults to 5 seconds. uint16_t usbVid; //!< [14:15] Sets the USB Vendor ID reported by the device //! during enumeration. If 0xFFFF, it defaults to 0x15A2. uint16_t usbPid; //!< [16:17] Sets the USB Product ID reported by the device //! during enumeration. uint32_t usbStringsPointer; //!< [18:1b] Sets the USB Strings reported by the //! device during enumeration. uint8_t clockFlags; //!< [1c:1c] The flags in the clockFlags configuration //! field are enabled if the corresponding bit is cleared (0). //! bit 0 - HighSpeed Enable high speed mode (i.e., 48 MHz). uint8_t clockDivider; //!< [1d:1d] Inverted value of the divider to use for //! core and bus clocks when in high speed mode. uint8_t bootFlags; //!< [1e:1e] If bit 0 is cleared, then Kinetis bootloader //! will jump to either Quad SPI Flash or internal flash //! image depending on FOPT BOOTSRC_SEL bits. //! If the bit is set, then Kinetis bootloader will prepare //! for host communication over serial peripherals. uint8_t pad0; //!< [1f:1f] Reserved, set to 0xFF uint32_t mmcauConfigPointer; //!< [20:23] A pointer to the MMCAU configuration //! structure in memory. uint32_t keyBlobPointer; //!< [24:27]Holds a pointer value to the key blob //! array used to configure OTFAD uint8_t pad1; //!< [28:28] reserved uint8_t canConfig1; //!< [29:29] ClkSel[1], PropSeg[3], SpeedIndex[4] uint16_t canConfig2; //!< [2a:2b] Pdiv[8], Pseg1[3], Pseg2[3], rjw[2] uint16_t canTxId; //!< [2c:2d] txId uint16_t canRxId; //!< [2e:2f] rxId uint32_t qspi_config_block_pointer; //!< [30:33] A pointer to the QSPI config //! block in internal flash array. uint32_t reserved[3]; //!<[34:3f] reserved } bootloader_config_t; __attribute__((section(".BootConfigArea"))) const bootloader_config_t BootloaderConfig = { .tag = 0x6766636B, //!< Magic Number .crcStartAddress = 0xFFFFFFFF, //!< Disable CRC check .crcByteCount = 0xFFFFFFFF, //!< Disable CRC check .crcExpectedValue = 0xFFFFFFFF, //!< Disable CRC check .enabledPeripherals = 0xE8, //!< Enabled Peripheral: CAN .i2cSlaveAddress = 0xFF, //!< Use default I2C address(0x10) .peripheralDetectionTimeoutMs = 0xFFFF, //!< Use default timeout(5000ms) .usbVid = 0xFFFF, //!< Use default Vendor ID(0x15A2) .usbPid = 0xFFFF, //!< Use default Product ID(0x0073) .usbStringsPointer = 0xFFFFFFFF, //!< Use default USB String .clockFlags = 0xFE, //!< Enable High speed mode .clockDivider = 0xFE, //!< Use clock divider(1) .bootFlags = 0xFF, //!< Enable communication with host .mmcauConfigPointer = 0xFFFFFFFF, //!< No MMCAU configuration .keyBlobPointer = 0xFFFFFFFF, //!< No key blob .canConfig1 = 0xF0, //!< Use user-defined canConfig1 .canConfig2 = 0xFFFF, //!< Use default canConfig2 .canTxId = 0x0270, //!< Use user-defined CAN TX ID .canRxId = 0x0269, //!< Use user-defined CAN RX ID .qspi_config_block_pointer = 0xFFFFFFFF, //!< No QSPI configuration };我试图选择没有自动检测的 125kHz 比特率。我还尝试根据我的规范设置传输和接收 ID。 我将链接器配置为将此对象写入“0x3C0”。当我对设备进行编程时,我可以确认内存空间是用我的 BCA 配置写入的: 0x000003A8 FFFFFFFF FFFFFFFF ÿÿÿÿÿÿÿÿ 0x000003B0 FFFFFFFF FFFFFFFF ÿÿÿÿÿÿÿÿ 0x000003B8 FFFFFFFF FFFFFFFF ÿÿÿÿÿÿÿÿ 0x000003C0 6766636B FFFFFFFF kcfgÿÿÿÿ 0x000003C8 FFFFFFFF FFFFFFFF ÿÿÿÿÿÿÿÿ 0x000003D0 FFFFFFE8 FFFFFFFF èÿÿÿÿÿÿÿ 0x000003D8 FFFFFFFF 00FFFEFE ÿÿÿÿþþÿ. 0x000003E0 FFFFFFFF FFFFFFFF ÿÿÿÿÿÿÿÿ 0x000003E8 FFFFF000 02690270 .ðÿÿp.i. 0x000003F0 FFFFFFFF 00000000 ÿÿÿÿ.... 0x000003F8 00000000 00000000 ........ 0x00000400 FFFFFFFF FFFFFFFF ÿÿÿÿÿÿÿÿ 0x00000408 FFFFFFFF FFFF7DFE ÿÿÿÿþ}ÿÿ 0x00000410 AF00B580 FCDDF001 .µ.¯.ðÝü 0x00000418 FCC8F001 FCD3F001 .ðÈü.ðÓü 然后我断开调试器,断言 NMI,然后重启芯片。我的 CAN 总线设置为使用 PEAK PCAN-USB。起初,总线上没有任何其他设备,但由于引导加载程序没有响应,PEAK 反复尝试发送从未被确认的消息。然后我在总线上添加了另一个设备,它的唯一工作就是确认数据包。 当我尝试与引导加载程序通信时,我发送以下内容: ``` $> sudo ip link set can0 up type can bitrate 125000 $> cansend can0 269#5AA6 ``` 根据第 23.3.7.1 节 - 这应该是一个 ping 数据包。 在 candump 中,我看到这条消息出现: ``` (1678900939.289388) can0 269 [2] 5A A6 ``` 我已经用示波器确认,当 PEAK 发送时,我看到了 CAN 总线消息。 我在 MKE16F 的 CAN 总线上没有看到任何响应。我也试过发送到以下地址: 0x270 - 以防万一它们向后 0x00000269 - 扩展地址 0x00000270 这些都不会引起引导加载程序的响应。 我假设我在配置上做错了什么。谁能告诉我我做错了什么? |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1906个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36358 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
4395 浏览 0 评论
6050 浏览 1 评论
6763 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4212 浏览 0 评论
619浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
614浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
605浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
694浏览 2评论
796浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-22 03:11 , Processed in 1.147514 second(s), Total 77, Slave 60 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号