跳转至内容

Discussion & Question

A place to talk about whatever you want or ask a question

1.9k 主题 8.6k 帖子

子版块


  • 开发环境搭建相关问题,Cmake,GCC,Ninja等

    202 主题
    952 帖子
    BillYinB

    YT-LINK怎么修改中断向量表,现在需要删掉IVT_RAM,但是直接删掉后会报错,生成不了代码。目的是想修改中断向量表的运行地址,使得中断向量表运行在PFLASH中,以便节省RAM的资源,请教大佬是否有解决办法。
    46420ea6-5cd3-499c-96f2-b061a0192439-1c7aaced3f5517d1fdc439adf6c1a77.png

    但是程序运行不了,程序卡在这。

    c2eeeec3-79f3-45d2-82fc-0d1c2cf3e12e-b100dccb8b9d425d530be8d7fccdcd7.png

  • Questions about YTM32Z seires

    19 主题
    64 帖子
    liuxu_smartensL

    请问是否有YTM32Z1MD04开发板控制电机的例程?六步换相算法的

  • Questions about YTM32B1H seires

    268 主题
    1k 帖子
    runR

    建议:将 MPU Region 0 配置为覆盖全 4 GB 地址空间的 non-cacheable 背景区,并采用 AP_NONE + XN 作为默认拒绝策略;再使用更高编号的 Region 显式开放实际需要访问的内存。下文MPU配置只针对于SDK,MCAL中MPU默认配置和下文一致,无需修改。

    1. 问题背景

    在已知案例中,系统使能 Cache 后偶发 IBUSERR(Instruction Bus Error);分析怀疑 Cache 预取访问越过有效区域并触及 CUS_NVR 或 其他未开放的NVR区域。将相关 NVR 区域显式配置为 non-cacheable,或关闭 MPU 的特权默认内存映射(PRIVDEFENA = 0)后,问题未再复现。

    IBUSERR 故障现场,BFSR.IBUSERR 置位
    上述现象用于说明配置风险,不代表所有 IBUSERR 都由同一原因引起。实际故障仍应结合 CFSR、HFSR、BFAR、MMFAR 和异常现场进一步确认。

    ARMv7-M 在 MPU 未覆盖区域可使用默认内存映射;其中部分地址范围具有 Cache 属性。如果使能 PRIVDEFENA,特权访问可能继续使用这些默认属性,导致未显式配置的地址仍可被访问。

    ARMv7-M 默认内存映射及 Cache 属性

    2. 推荐配置原则 Region 0 覆盖全 4 GB 地址空间:基址为 0x00000000,大小为 4 GB。 Region 0 默认禁用 Cache:配置为 Strongly-Ordered,TEX=0、C=0、B=0。 Region 0 默认禁止访问和执行:配置 AP_NONE 和 XN=1。因此它不只是一个 non-cacheable 区域,也是所有未授权地址的兜底拒绝区。 有效内存使用更高编号 Region 覆盖:MPU 区域重叠时,编号更高的 Region 优先。例如 Region 7/8 可覆盖 Region 6 的部分地址,提供 non-cacheable 映射。 配置前清除全部 Region:根据 MPU->TYPE 获取硬件实现的 Region 数量并逐个清除,避免 Bootloader 或前序代码留下的高编号 Region 覆盖当前配置。 关闭特权默认内存映射:调用 ARM_MPU_Enable(0U),确保 MPU_CTRL.PRIVDEFENA=0,未被白名单 Region 开放的地址不得访问。 先配置 MPU,再使能 Cache:避免在内存属性尚未确定时产生 Cache 行填充或预取。

    注意: 如果把 Region 0 改为 AP_FULL,虽然仍可设置 non-cacheable,但会失去“未配置地址默认禁止访问”的白名单保护效果,建议使用白名单控制更精确。

    3. Region 配置摘要 Region 地址和大小 内存属性 访问/执行属性 用途 0 0x00000000, 4 GB Strongly-Ordered, non-cacheable No Access, XN 全地址空间背景区 1 0x00000000, 32 KB Normal, non-cacheable Full Access, executable ITCM 2 0x02000000, 2 MB Normal, Write-Through Full Access, executable PFlash 3 0x06000000, 256 KB Shareable Device Full Access, XN DFlash 4 0x10000000, 16 KB Device Privileged RW, XN NVR0 5 0x10020000, 16 KB Device Privileged RW, XN NVR1 6 0x20000000, 512 KB Normal, WBWA Full Access, executable SRAM 主区域 7 0x20000000, 128 KB Normal, non-cacheable, shareable Full Access, executable DTCM,覆盖 Region 6 8 0x20020000, 64 KB Normal, non-cacheable Full Access, executable OCRAM non-cacheable 区 9 0x40000000, 2 MB Device Privileged RW, XN APB 外设 10 0x67000000, 128 B Device, non-shareable Full Access, executable QSPI RX Buffer 11 0xE0000000, 1 MB Device, non-shareable Privileged RW, XN PPB 4. MPU 参考配置 void MPU_Config(void) { uint32_t region; uint32_t region_count; ARM_MPU_Disable(); /* Clear all implemented regions to remove any previous MPU configuration. */ region_count = (MPU->TYPE & MPU_TYPE_DREGION_Msk) >> MPU_TYPE_DREGION_Pos; for (region = 0U; region < region_count; ++region) { ARM_MPU_ClrRegion(region); } /* Region 0: 4GB background, strongly-ordered, no access, XN */ MPU->RBAR = ARM_MPU_RBAR(0, 0x00000000U); MPU->RASR = ARM_MPU_RASR(1, ARM_MPU_AP_NONE, 0, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_4GB); /* Region 1: ITCM 0x00000000 32KB, Normal non-cacheable, RWX */ MPU->RBAR = ARM_MPU_RBAR(1, 0x00000000U); MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 1, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_32KB); /* Region 2: PFlash 0x02000000 2MB, Normal write-through, RWX */ MPU->RBAR = ARM_MPU_RBAR(2, 0x02000000U); MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 0, 0, 1, 0, 0, ARM_MPU_REGION_SIZE_2MB); /* Region 3: DFlash 0x06000000 256KB, Shareable device, XN */ MPU->RBAR = ARM_MPU_RBAR(3, 0x06000000U); MPU->RASR = ARM_MPU_RASR(1, ARM_MPU_AP_FULL, 0, 1, 0, 1, 0, ARM_MPU_REGION_SIZE_256KB); /* Region 4: NVR0 0x10000000 16KB, Device, privileged RW, XN */ MPU->RBAR = ARM_MPU_RBAR(4, 0x10000000U); MPU->RASR = ARM_MPU_RASR(1, ARM_MPU_AP_PRIV, 0, 0, 0, 1, 0, ARM_MPU_REGION_SIZE_16KB); /* Region 5: NVR1 0x10020000 16KB, Device, privileged RW, XN */ MPU->RBAR = ARM_MPU_RBAR(5, 0x10020000U); MPU->RASR = ARM_MPU_RASR(1, ARM_MPU_AP_PRIV, 0, 0, 0, 1, 0, ARM_MPU_REGION_SIZE_16KB); /* Region 6: SRAM 0x20000000 512KB, Normal WBWA, RWX */ MPU->RBAR = ARM_MPU_RBAR(6, 0x20000000U); MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 5, 0, 0, 1, 0, ARM_MPU_REGION_SIZE_512KB); /* Region 7: DTCM 0x20000000 128KB, Normal non-cacheable shareable, RWX */ MPU->RBAR = ARM_MPU_RBAR(7, 0x20000000U); MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 1, 1, 0, 0, 0, ARM_MPU_REGION_SIZE_128KB); /* Region 8: OCRAM 0x20020000 64KB, Normal non-cacheable, RWX */ MPU->RBAR = ARM_MPU_RBAR(8, 0x20020000U); MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 1, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_64KB); /* Region 9: APB 0x40000000 2MB, Device, privileged RW, XN */ MPU->RBAR = ARM_MPU_RBAR(9, 0x40000000U); MPU->RASR = ARM_MPU_RASR(1, ARM_MPU_AP_PRIV, 0, 0, 0, 1, 0, ARM_MPU_REGION_SIZE_2MB); /* Region 10: QSPI RX buffer 0x67000000 128B, Device non-shareable, RWX */ MPU->RBAR = ARM_MPU_RBAR(10, 0x67000000U); MPU->RASR = ARM_MPU_RASR(0, ARM_MPU_AP_FULL, 2, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_128B); /* Region 11: PPB 0xE0000000 1MB, Device non-shareable, privileged RW, XN */ MPU->RBAR = ARM_MPU_RBAR(11, 0xE0000000U); MPU->RASR = ARM_MPU_RASR(1, ARM_MPU_AP_PRIV, 2, 0, 0, 0, 0, ARM_MPU_REGION_SIZE_1MB); /* * DefaultMapEn = FALSE: MPU_CTRL.PRIVDEFENA remains 0. * RunHFNMIEn = FALSE: MPU_CTRL.HFNMIENA remains 0. * ARM_MPU_Enable() enables MemManage faults through SCB->SHCSR. */ ARM_MPU_Enable(0U); } 5. 集成检查项 确认芯片实现的 MPU Region 数量满足配置需求,可读取 MPU->TYPE 核对。 确认每个 Region 的基址按 Region 大小对齐,大小为 MPU 支持的 2 的幂。 对照芯片 Memory Map 和链接脚本,覆盖所有 CPU 会访问的代码、数据、启动区、外设、NVR、外部存储及别名地址。 禁用 MPU 后先清除硬件实现的全部 Region,再写入当前配置,避免残留的高编号 Region 取得更高优先级。 保持 Region 0 为最低编号;需要覆盖其属性的有效区域使用更高编号。 NVR、外设寄存器和其他不允许 Cache 的区域必须显式配置为 Device、Strongly-Ordered 或合适的 Normal non-cacheable 类型。 DMA 缓冲区应使用 non-cacheable 区域,或严格执行 Cache clean/invalidate;不能只依赖 Region 0。 根据最小权限原则复核 AP 和 XN。数据区通常应设置 XN,只读程序 Flash 通常不应开放不必要的写权限。 在 MPU 配置完成后再使能 I-Cache/D-Cache;修改运行中的内存属性前后按 CMSIS/芯片手册要求执行 Cache 维护及 DSB/ISB。 若应用确实需要在 HardFault、NMI 中使用 MPU 白名单外的地址,应单独评估 HFNMIENA,不要直接照搬示例。 6. 验证建议

    完成配置后,至少执行以下验证:

    启动验证:系统可正常完成启动,向量表、启动代码、栈、堆和所有初始化访问均被白名单覆盖。 功能验证:覆盖 Flash/NVR 擦写、外设访问、DMA、QSPI、通信和低功耗唤醒等实际场景。 负向验证:在受控测试中访问一个未开放地址,应触发 MemManage Fault,而不是继续采用默认内存属性访问。 稳定性验证:在客户实际负载、编译优化等级和工作温度下进行长时间压力测试,确认 CFSR.IBUSERR、PRECISERR、IMPRECISERR 等故障位不再出现。 7. 结论

    Region 0 建议统一配置为覆盖全 4 GB 的 non-cacheable、No Access、XN 背景区,并关闭 PRIVDEFENA。这种白名单方式可以避免未显式配置区域继承 ARM 默认内存映射和 Cache 属性;具体可访问、可执行及可缓存范围由更高编号 Region 精确开放。

  • Questions about YTM32B1M seires

    733 主题
    4k 帖子
    YangchengyeY

    上位机启动CAN发送数据,显示ACK err。CAN0 ECR->RCERRCNT 0x81。不能进CAN中断。
    d6b62e38-b65c-4381-8cd5-25868e897db0-image.png
    8c119760-6273-495c-a54f-a1e7b8ee93d6-image.png

  • Questions about YTM32B1L seires

    264 主题
    1k 帖子
    xianghanX

    建议统一使用CHMASK实现

  • Questions about YT SDK

    168 主题
    699 帖子
    DigaD

    看一下 EFM->STS and EFM->CMD_PROT 是什么值

  • Questions about YT MCAL
    提问请附带芯片和软件版本信息

    134 主题
    654 帖子
    jiankang_wangJ

    你这个应该是版本搞混了哦,这个宏是在这个文件定义的:./Mcal/Platform/inc/OsIf.h
    代码覆盖的话一般是在你的源代码会被覆盖的情况下才会弹窗,可能是你修改了本地的源文件,也可能是源文件的版本对应不上。
    你生成的代码可能是新一点都,而老版本的Osif文件中没有定义这个宏

  • AES-CMAC/AES-ECB测算

    8
    0 赞同
    8 帖子
    6k 浏览
    D

    Wangchu1 可以参考这个方法:
    8b3b632a-354e-45e0-aff3-0d4dad2862a4-image.png

  • YTM32B1MD1刻录器问题

    7
    0 赞同
    7 帖子
    3k 浏览
    YQHY

    abcbill https://forum.ytmicro.com/topic/183/p-e-cyclone离线烧录使用简介/11?_=1772073125659

  • YTM32B1MD1中云途工具生成的程序问题

    4
    0 赞同
    4 帖子
    3k 浏览
    jiankang_wangJ

    在 UDS 协议栈的配置中,UDS_IP_xxx_ENABLE 宏确实是关键的预编译参数,用于按需裁剪代码。针对您发现增加 ProgrammingSession 后未生成对应宏的情况,原因通常如下:

    在 yct 的生成逻辑中,并非每一个具体的子项(如某个具体的 Session 类型)都会独立对应一个 ENABLE 宏。

  • YTM32B1MD1中的ld档案修改问题?

    5
    0 赞同
    5 帖子
    2k 浏览
    abcbillA

    .bss.g_spiStatePtr
    0x1fff8c20 0x10 libGENERATED_SDK_TARGET.a(spi_shared_function.c.o)
    0x1fff8c20 g_spiStatePtr
    看起来是在.bss
    但奇怪的是我用原本的ld檔就不会出事,底下为原本的ld檔
    /*

    Copyright 2020-2025 Yuntu Microelectronics Co., Ltd. All rights reserved. SPDX-License-Identifier: BSD-3-Clause @file yt_linker.ld @brief

    */

    /* MEMORY MAP /
    MEMORY
    {
    IVT (RX) : ORIGIN = 0x0, LENGTH = 0x400
    BOOT (RX) : ORIGIN = 0x400, LENGTH = 0x7c00
    IVT_RAM (RW) : ORIGIN = 0x1fff8000, LENGTH = 0x400
    STACK (RW) : ORIGIN = 0x20007c00, LENGTH = 0x400
    RAM (RW) : ORIGIN = 0x1fff8400, LENGTH = 0xf800
    }
    / SECTIONS */
    SECTIONS
    {
    .IVT : {

    IVT_start = .; isr_vector_region_start = .; KEEP(*(.isr_vector)) isr_vector_region_end = .; IVT_end = .; } > IVT .TEXT : { TEXT_start = .; rodata_region_start = .; *(.rodata) *(.rodata*) rodata_region_end = .; text_region_start = .; *(.text) *(.text*) text_region_end = .; TEXT_end = .; } > BOOT .ARM : { ARM_start = .; ARM.exidx_region_start = .; *(.ARM.exidx) *(.ARM.exidx*) ARM.exidx_region_end = .; ARM_end = .; } > BOOT CODE_RAM_rom_start_not_align = .; CODE_RAM_rom_start = CODE_RAM_rom_start_not_align + (CODE_RAM_rom_start_not_align % 4); CODE_RAM_rom_end = CODE_RAM_rom_start + CODE_RAM_ram_end - CODE_RAM_ram_start; DATA_RAM_rom_start_not_align = CODE_RAM_rom_end; DATA_RAM_rom_start = DATA_RAM_rom_start_not_align + (DATA_RAM_rom_start_not_align % 4); DATA_RAM_rom_end = DATA_RAM_rom_start + DATA_RAM_ram_end - DATA_RAM_ram_start; .IVT_RAM : { . = ALIGN(1024); IVT_RAM_start = .; . += 0X400; IVT_RAM_end = .; } > IVT_RAM .STACK : { STACK_start = .; . += 1024; STACK_end = .; } > STACK .BSS (NOLOAD): { BSS_start = .; bss_region_start = .; *(.bss) *(.bss*) bss_region_end = .; BSS_end = .; } > RAM .CODE_RAM : AT(CODE_RAM_rom_start) { . = ALIGN(4); CODE_RAM_ram_start = .; CODE_RAM_start = .; code_ram_region_start = .; *(.code_ram) code_ram_region_end = .; CODE_RAM_end = .; CODE_RAM_ram_end = .; } > RAM ASSERT((CODE_RAM_ram_end - CODE_RAM_ram_start) == (CODE_RAM_rom_end - CODE_RAM_rom_start), "Copy Section CODE_RAM Size non-aligned") .DATA_RAM : AT(DATA_RAM_rom_start) { DATA_RAM_ram_start = .; DATA_RAM_start = .; data_region_start = .; *(.data) *(.data*) data_region_end = .; DATA_RAM_end = .; DATA_RAM_ram_end = .; } > RAM ASSERT((DATA_RAM_ram_end - DATA_RAM_ram_start) == (DATA_RAM_rom_end - DATA_RAM_rom_start), "Copy Section DATA_RAM Size non-aligned") IVT_memory_start = ORIGIN(IVT); IVT_memory_end = ORIGIN(IVT) + LENGTH(IVT); IVT_memory_size = LENGTH(IVT); BOOT_memory_start = ORIGIN(BOOT); BOOT_memory_end = ORIGIN(BOOT) + LENGTH(BOOT); BOOT_memory_size = LENGTH(BOOT); IVT_RAM_memory_start = ORIGIN(IVT_RAM); IVT_RAM_memory_end = ORIGIN(IVT_RAM) + LENGTH(IVT_RAM); IVT_RAM_memory_size = LENGTH(IVT_RAM); STACK_memory_start = ORIGIN(STACK); STACK_memory_end = ORIGIN(STACK) + LENGTH(STACK); STACK_memory_size = LENGTH(STACK); RAM_memory_start = ORIGIN(RAM); RAM_memory_end = ORIGIN(RAM) + LENGTH(RAM); RAM_memory_size = LENGTH(RAM);

    }

  • APP进入PowerDown模式休眠后,唤醒复位后进入Boot进入hardfault

    2
    0 赞同
    2 帖子
    2k 浏览
    DigaD

    普通的 RAM 在 Power Down 模式唤醒后会丢失,你设不设置这个 POR Only 没啥用,但每款芯片都有一段专门的 Retention RAM,可以保证在Power Down 模式唤醒后会不丢失

  • delay us相关

    2
    0 赞同
    2 帖子
    2k 浏览
    KirkK

    可以用定时器模块去做呀,PTMR、LPTMR 等模块都可以

  • YTM32B1MD1中的ld档案问题

    4
    0 赞同
    4 帖子
    2k 浏览
    WRW

    abcbill 如果你们有使用内部ee的要求,需要参考一下这个帖子(https://forum.ytmicro.com/topic/1163/md14_ab_swap-fee?_=1769069859281)

  • 0 赞同
    8 帖子
    3k 浏览
    abcbillA

    问题已经得到解决,感谢支持.

  • YTM32B1MD14 - eTMR Interrupt Issue When Using As PWM Input Capturing Mode

    1
    0 赞同
    1 帖子
    1k 浏览
    尚无回复
  • 关于CAN采样点误差问题

    1
    2 赞同
    1 帖子
    1k 浏览
    尚无回复
  • HA0的SAI音频设置,包括I2C的耳放配置有没有Demo

    8
    0 赞同
    8 帖子
    5k 浏览
    kasselK

    sunxuehu 在 HA0的SAI音频设置,包括I2C的耳放配置有没有Demo 中说:

    这个是最新的,sai目前还没有做yct 配置界面,需要手动移植下,后面会将这个移植到YCT配置上

    好的,收到

  • 使用软件复位后保留RAM中的数据,复位后无法保存

    40
    0 赞同
    40 帖子
    29k 浏览
    DigaD

    下次再有问题可以新起一个帖子,这个贴楼太多了

  • 单元测试问题

    1
    0 赞同
    1 帖子
    2k 浏览
    尚无回复
  • vscode+vcc生成elf文件后,跳转ozone失败

    6
    0 赞同
    6 帖子
    3k 浏览
    luxiaoguoL

    ysog 在 vscode+vcc生成elf文件后,跳转ozone失败 中说:

    不要中文路径试试

    更换路径,不是中文路径,就可以了,多谢大佬

  • YTM32B1MD的ETMR触发ADC问题。

    7
    0 赞同
    7 帖子
    4k 浏览
    OliverChenO

    WR 好的多谢,CIM这块我在其他地方有更改了,忘记贴了

  • YTconfigTool 配置工具中的LOGO可以拖动

    2
    0 赞同
    2 帖子
    3k 浏览
    FrankieF

    感谢反馈,下个版本修复。

  • 在YTM32B1MD24的HCU_Demo例程中,如何生成例程中定义的RSA密钥数据格式?

    3
    -1 赞同
    3 帖子
    4k 浏览
    WCtdcswW

    YQH 好的,谢谢

  • YTM32B1MD1 ADC Selftest

    4
    0 赞同
    4 帖子
    3k 浏览
    houjun_xiaoH

    The ADC_SEx are the external input channels of the ADC, but the internal temperature sensor and PMC VREF are all internal input channels of the ADC .So they do not need to be connected to ADC_SEx. The PMC VREF can be converted by configuring the corresponding channel number into the ADC[CHSEL] register. The channel number for PMC VREF is 33.

  • YTM32BLE05,LIN引脚映射只能用UART0吗,句柄换成UART2用不了

    9
    0 赞同
    9 帖子
    5k 浏览
    aminA

    格式无效是怎么回事

  • YTM32B1ME05GOMLLT芯片, 使用Linflexd_Uart_Interrupt_Demo 无法连续发送数据

    3
    0 赞同
    3 帖子
    4k 浏览
    HAIYANGH

    同样测试Linflexd_Uart_coutinuous_transmission_Demo,测试结果如下,8字节也可以在1ms内发送完成;
    根据计算,1个byte发送需要10个bit,8个字节是80个bit,115200的波特率一个bit是8.68us,8个字节一共需要大概694us,从测试结果看时间相差不大;demo应该是没问题的,请再测试一下;
    image.png

  • 云途开发生态介绍

    快速上手云途开发生态

  • 云途论坛规则/Yuntu Forum Rules

    发帖前请查看

  • YT CONFIG TOOL调查问卷

    帮助改进和优化YT CONFIG TOOL,有机会抽取YTM32B1ME0 EVB哦...

  • Online Users