跳转至内容
  • 版块
  • 最新
  • 标签
  • 热门
折叠
品牌标识

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1H系列
  4. HA0-demo_PowerDown_PollingWeakup

HA0-demo_PowerDown_PollingWeakup

已定时 已固定 已锁定 已移动 YTM32B1H系列
1 帖子 1 发布者 25 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • DZHD 离线
    DZHD 离线
    DZH YunTu
    编写于 最后由 编辑
    #1

    版本
    Config Tool Version:2.7.6
    HA0 SDK version:1.3.1
    IAR
    背景
    作为车身域,有大量的输入需要在低功耗睡眠后检测唤醒源,且因为检测逻辑相对比较复杂,因此需要MCU本身唤醒参与判断,对于整体平均电流有要求,不能过高。
    需求

    • 100ms周期唤醒,由powerdown -> 周期唤醒状态,周期唤醒状态保持约2ms。
    • 周期唤醒模式:
      初始化:运行内部低速时钟,初始化必要外设(ADC,SPI,PORT)。
      运行:
      1. 驱动运行(ADC,SPI,PORT,PWM,UART/LIN)。
      2. 部分变量需要保持, Standbyram不应过小。
      3. 工作时间大约2ms。
    • 正常run模式下满足休眠条件后,设置唤醒源,关闭外设进入PowerDown模式。
    • 云途HA0板测试睡眠电流大小,功耗小于1ma。
      本文简述YTM32B1HAx的PoweDown下周期唤醒的实现过程。
      解决方案描述
      1.使用lptmr定时100ms定时自动唤醒(此唤醒是WKU模块的lptmr硬件中断唤醒),保证唤醒时间保持2ms,并测量开发板的powerdown模式整板功耗;
      0122c6f4-3710-46d5-b421-4476509def80-image.png
      2.使用YT-Link从RAM划分一片Retention_RAM区域,用于powerdown唤醒后的变量保持.因为retention_ram在powerdown下是可以保持的,所以周期性唤醒不需要初始化retention_ram区域,只需要在上电后初始化这片retention_ram即可。
      89af4a5b-a284-4b95-888e-0450961c22c0-image.png
      powerdown下唤醒复位还是会初始化retention_ram,所以需要在RamInit0.S文件里添加初始化判断。通过判断REGFILE寄存器值(powerdown模式下数据不丢失,共32个字节),如果REGFILE寄存器值为周期性唤醒标志则不初始化。我这里的标志是REGFILE->DR[0] = 0x55。
      6d73542a-f2f2-4a78-ba25-fbc3318ac7a0-image.png
      3.定义Restart_init函数,在starup.s中的RamInit1之后添加汇编代码,每次重启判断REGFILE寄存器值,如果REGFILE寄存器值为唤醒标志则唤醒,不满足则继续周期休眠。在RestartInit函数中做必要的驱动运行。在RestartInit函数中做唤醒检测,有数字输入唤醒和ADC唤醒。
      302ce2b7-3375-4ccf-8110-25648b170ba9-image.png
      27d36305-af61-4ed0-a75f-686963edc78e-image.png
      cca03efc-f20f-4baa-8969-d8db8b165379-image.png
    • 唤醒逻辑:进休眠前配置REGFILE->DR[0]=0x55(休眠标志),在restart_init中判断REGFILE->DR[0]决定是否进入周期唤醒逻辑。(防止非休眠导致的reset进入周期唤醒逻辑)在restart_init函数中可以判断IO口状态及ADC采样值,若满足全唤醒条件则可以配置REGFILE->DR[1]=0x55进行全唤醒操作(即程序不再进入休眠,而是程序跳过休眠,顺序向下执行到mian函数)。
      4.保证Ram_Init0和Ram_Init1的初始化时间正常。
      按照上述方法实测过程中功能基本实现,但是在低优化等级下会概率性发生RAM初始化时间变长导致功耗异常升高的问题,困扰许久。最后发现问题是RAM初始化时循环赋值取指令多次访问FLASH,导致时间变长。
      2568ee22-05c8-4653-a21f-945510603c09-image.png
      优化方式如下:
    • Ram_Init0:
      daf6432e-649f-4ca3-9c73-f1cbe40cb68d-image.png
    • Ram_Init1,memcpy和memset代替循环赋值;打开I-Cache,进入主函数关掉。
      f032bf31-ae66-43dc-b55f-7cc34f3daa17-image.png
      fec9bfcc-9c76-415e-bbc2-aef3a9beb58a-image.png
      5.通过翻转IO测试RAM初始化和restart_init函数运行所需要的时间,唤醒能保持2ms;
      6.测量平均休眠功耗;
      实测说明
      1.实测波形
      RamInit0时间1.7ms左右(256k-32k),Restart_Init时间400us左右。
      830b0869-6efb-4f02-89d6-468ebd4378c7-image.png
      ecf968d0-b96e-4ed7-a84a-f204d77d0ad8-image.png
    1. 周期唤醒功耗
      powerdowm模式下功耗在0.15ma左右;
      af8346ea-690a-4985-a40f-cd2b9bf7572f-image.png
      周期性唤醒功耗约在0.8ma左右。
      1d9114c6-d659-4269-aa0e-d058c96e3ac0-91b43406cb79869ea021995ce213676.jpg
      使用说明
      1,PTA20检测到高电平即可进入polling模式;
      2,在polling模式下按下开发板按键S2(WKU唤醒引脚),或者ADC唤醒(PTA_7接5V)。
      工程
      BasedonPowerdownDemo_IAR.zip
    1 条回复 最后回复
    0
    • yt0069Y yt0069 从 Others 移动了该主题

  • 云途论坛规则/Yuntu Forum Rules

    发帖前请查看

  • YCT离线License申请流程

    帮助没办法联网的电脑使用YCT

  • YT CONFIG TOOL调查问卷

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

  • can
    16
    demo
    15
    uds
    7
    lin stack
    6
    fbl
    5
    yt-link
    5
    md14
    4
    adc模块
    3
    Online Users
    • 登录

    • 登录或注册以进行搜索。
    • 第一个帖子
      最后一个帖子
    0
    • 版块
    • 最新
    • 标签
    • 热门