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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1H系列
  4. 写flash 后读 flash 导致 bus fault

写flash 后读 flash 导致 bus fault

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

    写操作需要一定的时间,可能你读的时候还没有写完,写数据后可以等flash idle后再读

    iyshengI 2 条回复 最后回复
    0
    • iyshengI 离线
      iyshengI 离线
      iysheng
      在 回复了 swust 最后由 编辑
      #3

      swust 感谢你的回复,目前测试了在read 之前添加下述代码可以正常运行。

      while(0X00 == (REG32(EFM_STS) & EFM_STS_IDLE_MASK));
      

      补丁如下:

      int board_flash_read(uint32_t addr, uint8_t *data, uint32_t size)
       {
      +    // Wait Flash Idle
      +    while(0X00 == (REG32(EFM_STS) & EFM_STS_IDLE_MASK));
           rt_memcpy(data, (uint8_t *)addr, size);
           return 0;
       }
      

      但是这个 while 循环等待放在 write 函数的末尾还是不能解决问题,好奇怪。

      1 条回复 最后回复
      0
      • swustS 离线
        swustS 离线
        swust YunTu
        写于 最后由 编辑
        #4

        把while放在write后再加两个空指令试试

        iyshengI 1 条回复 最后回复
        0
        • iyshengI 离线
          iyshengI 离线
          iysheng
          在 回复了 swust 最后由 编辑
          #5

          swust 确实可以哦,方便更深层次解释下原理么?😊

          swustS 1 条回复 最后回复
          0
          • swustS 离线
            swustS 离线
            swust YunTu
            在 回复了 iysheng 最后由 编辑
            #6

            iysheng 应该是CPU指令时序竞争

            iyshengI 1 条回复 最后回复
            0
            • iyshengI 离线
              iyshengI 离线
              iysheng
              在 回复了 swust 最后由 编辑
              #7

              swust 又有了新的问题出现,同样的而 API ,写 0X2150000 这个地址,4字节 0X00000000。这个 flash 地址原始数据不是全 0XFFFFFFFF(之前写过数据),发现数值不变。但是写 0X2170000 这个地址,4字节 0X00000000。这个地址之前的数据是全 0XFFFFFFFF 就可以,请问这个正常么?

              1 条回复 最后回复
              0
              • qinzhaoQ 离线
                qinzhaoQ 离线
                qinzhao YunTu
                写于 最后由 编辑
                #8

                flash只能在被擦除过的地方编程,擦除后就是0xffff。

                iyshengI 1 条回复 最后回复
                0
                • iyshengI 离线
                  iyshengI 离线
                  iysheng
                  在 回复了 qinzhao 最后由 编辑
                  #9

                  qinzhao flash 不是可以将 1 写成 0,ytm32b1ha0 flash 必须要是全 0XFFFFFFFF 才能写入?

                  1 条回复 最后回复
                  0
                  • iyshengI 离线
                    iyshengI 离线
                    iysheng
                    在 回复了 swust 最后由 编辑
                    #10

                    swust 进一步调试发现,出问题的时候还没有执行写操作,
                    Screenshot from 2026-06-13 09-42-54.png
                    出问题的时候, BIT 2 UNRECOVERR 是 1。

                    swustS 1 条回复 最后回复
                    0
                    • swustS 离线
                      swustS 离线
                      swust YunTu
                      在 回复了 iysheng 最后由 编辑
                      #11

                      iysheng 写之前都要擦一遍

                      1 条回复 最后回复
                      0

                    • 云途开发生态介绍

                      快速上手云途开发生态

                    • 云途论坛规则/Yuntu Forum Rules

                      发帖前请查看

                    • YT CONFIG TOOL调查问卷

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

                    • can
                      28
                      demo
                      23
                      uds
                      14
                      lin stack
                      13
                      md14
                      6
                      yt-link
                      6
                      fbl
                      5
                      adc模块
                      4
                      Online Users
                      • 登录

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