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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1L系列
  4. [LE1]咨询一下FEE擦除逻辑

[LE1]咨询一下FEE擦除逻辑

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

    背景:我使用的是YTM32B1LE1,采用最新版SDK(1_3_1)。
    目前FEE模块配置为每Sector0x200长度,2个Sector为1个Cluster,对应的Block长度为136Bytes。
    但是我发现每五次写入此Block时,写入时间会比常规情况下多5-6ms。

    理论上,每个Block长度136Byte,加上FEE的前后封装32Byte,应是168Byte,写入3次就是504Byte,刚好比0x200(512)小一点。
    第4次写入应该是在第二个Block上,而第5次写入则为第2个Block的中段。

    我的猜想为:在第5次尝试写入时,FEE模块发现有第4次的数据,即使第5次写入错误,也可以重新读取第4次的数据,此时可以擦除第1个Block。但是这个理论推算出来应该是每3次写入会去擦除另一个Block。

    麻烦各位大佬为我讲解一下FEE的擦除逻辑,什么时候去擦除?感谢!

    1 条回复 最后回复
    0
    • yt0503Y 在线
      yt0503Y 在线
      yt0503 YunTu
      编写于 最后由 编辑
      #2

      每个Cluster的前32Byte会写入固定信息。所以(512-32)/ 168 = 2,第3次写入会产生换页

      pengh1994P 1 条回复 最后回复
      0
      • DerrickD 在线
        DerrickD 在线
        Derrick YunTu
        编写于 最后由 编辑
        #3

        不知道你是同步还是异步,如果是同步,要参考下面这篇文章改一下底层:
        https://forum.ytmicro.com/topic/556/ytm32b1mc0-sdk-1_3_1版本fee配置同步-写入一部分数据后-无法写入问题?_=1752740215512,SDK1.3.1以前的版本需要参考这个帖子修改一下。
        FEE的翻页逻辑:在写入Block数据时,如果剩余空间满足 Block数据(136B) + Block信息(32B) + 间隔(32B) = 200B,就可以写入;不满足就会翻页,写入下一个Cluster,会执行擦除。

        pengh1994P 1 条回复 最后回复
        0
        • pengh1994P 离线
          pengh1994P 离线
          pengh1994
          回复了yt0503 最后由 编辑
          #4

          yt0503 感谢提醒,那我这个就属于每次两个Sector都用完,尝试去擦除第一个Sector时多出来的时间。
          但是按这个思路来讲,应该是每第3次去写入时间会变长,而不是现在这样每第5次写入才会变长啊

          1 条回复 最后回复
          0
          • pengh1994P 离线
            pengh1994P 离线
            pengh1994
            回复了Derrick 最后由 编辑
            #5

            Derrick 不好意思再请教一下,间隔的32B是每一个Block都有吗,还是每一个Sector/Cluster只有一个?

            DerrickD 1 条回复 最后回复
            0
            • DerrickD 在线
              DerrickD 在线
              Derrick YunTu
              回复了pengh1994 最后由 编辑
              #6

              pengh1994 只有Cluster会有

              1 条回复 最后回复
              0
              • pengh1994P 离线
                pengh1994P 离线
                pengh1994
                编写于 最后由 pengh1994 编辑
                #7

                Derrick yt0503 两位大佬,抱歉打扰了。我继续调查发现了每五次写入时时间会变长的原因。我在断电时会先后写入两个Block: Block1长度为32Byte,Block2长度为136Byte。对应的Sector,Cluster配置都一样,Block1对应的Sector为0x400-0x5FF, 0x600-0x7FF; Block2对应的Sector为0xC00-0xDFF,0xE00-0xFFF. 接下来就是奇怪的点了,按我们计算,每个Sector可以保存2个Block2或者7个Block1。但实际测出来每个Sector只能保存1个Block2或者4个Block1. 即每次检测到断电,Block2写入前都会去执行一次擦除,而每第五次,回去执行一次Block1对应Sector的擦除。也就导致了我最前面提到的每五次时间会变长。

                我现在不清楚为何实际存储次数会和理论值差别这么大,很奇怪。

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

                  对于你Block2(size 136byte)来说,cluster长度512byte太小了。理论计算就只能写入两次数据。除了前两次写入,后面每次写入都在翻页,我们在新的cluster中都会拷贝一次Block的历史最新数据到翻页后的cluster中,也就是说,你每次写入都把后面新的cluster写满了,所以除了前两次后面每次Block2写入都在翻页。
                  Fee cluster 翻页的机制如下:在NvM请求数据写入时,根据Block ID查询所属Cluster Group的空闲地址,并判断该地址所属Cluster空闲空间能否满足本次写入,若满足则调用Flash driver写入数据;若不满足,则根据Cluster Group配置查询下一个可写的Cluster并擦除,然后将当前Cluster Group中所有Block的最新数据搬移至该新的Cluster中,搬移完成后再写入本次需要写入的Block数据。

                  pengh1994P 1 条回复 最后回复
                  0
                  • pengh1994P 离线
                    pengh1994P 离线
                    pengh1994
                    回复了houjun_xiao 最后由 编辑
                    #9

                    houjun_xiao 那关于Block1呢,理论上512B - 32Cluster间隔 = 480B, 每个Block1长度为32B+32B = 64B, 即 480/64 = 7.5, 即7次,就算加上翻页后copy的一次,也还能写入6次。 但为何每第五次写入需要去擦除另一个Sector呢?

                    DerrickD YQHY 2 条回复 最后回复
                    0
                    • DerrickD 在线
                      DerrickD 在线
                      Derrick YunTu
                      回复了pengh1994 最后由 编辑
                      #10

                      pengh1994 是全擦除写的吗?按照计算全擦的情况下应该能写7次。第八次会换页
                      32 (CLuster信息头)+ 64*7 (7次Block数据) + 32 (间隔) = 512Byte

                      1 条回复 最后回复
                      0
                      • YQHY 在线
                        YQHY 在线
                        YQH YunTu
                        回复了pengh1994 最后由 编辑
                        #11

                        pengh1994 建议先擦除全片,在你的调试工程中调用写入操作后,在调用Fee_MainFunction函数的位置打断点,每单步执行一次同时观测下memory窗口对应flash地址写入的数据。这样会比较清楚0ee26e52-260f-4114-bdc9-1270c8d7d6ad-image.png
                        结合这个文档一起看下:YTM32系列Fee模块介绍.pdf

                        1 条回复 最后回复
                        0
                        • houjun_xiaoH 离线
                          houjun_xiaoH 离线
                          houjun_xiao YunTu
                          编写于 最后由 编辑
                          #12

                          Fee cluster的存储结构如下:
                          image.png
                          这个结构决定我们在写入数据时需要Block Header与Block Data区域之间需要32byte的全FF间隔。因此实际写入的空间为512-32-32。另外你需要确认一下,你的配置里面是否有预留区域,可以看一下cluster group:

                          image.png

                          pengh1994P 1 条回复 最后回复
                          0
                          • pengh1994P 离线
                            pengh1994P 离线
                            pengh1994
                            回复了houjun_xiao 最后由 编辑
                            #13

                            houjun_xiao 感谢分享,我的FEE配置中没有预留区域。另外,我这里单独打断点发现以下数据:
                            在写Block1的时候,先打断点在Fee_Write(),断点到达后,再打断点在Fls_Write(), 观察第一次停下时TargetAddress的值,之后暂时关闭断点继续运行。
                            7d0b02cb-6138-4853-876a-6def48e7cd40-image.png
                            反复尝试,发现接连几次运行下来,TargetAddress的值分别为:0x600, 0x660, 0x6C0, 0x6E0. 再下一次运行就会跳转到0x400的Sector了。

                            目前下来唯一不清楚的就是这个问题,为何只能写入四次,每第五次尝试写入会换页

                            DerrickD 1 条回复 最后回复
                            0
                            • DerrickD 在线
                              DerrickD 在线
                              Derrick YunTu
                              回复了pengh1994 最后由 编辑
                              #14

                              pengh1994 你有空拉个会,我们来看下

                              1 条回复 最后回复
                              0
                              • houjun_xiaoH 离线
                                houjun_xiaoH 离线
                                houjun_xiao YunTu
                                编写于 最后由 编辑
                                #15

                                方便的话,你可以把Fls中写的数据截图我们看一下,调试memory窗口查看Fee写入的原始数据:

                                image.png

                                1 条回复 最后回复
                                0

                              • 云途开发生态介绍

                                快速上手云途开发生态

                              • 云途论坛规则/Yuntu Forum Rules

                                发帖前请查看

                              • YT CONFIG TOOL调查问卷

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

                              • can
                                19
                                demo
                                19
                                uds
                                12
                                lin stack
                                10
                                md14
                                6
                                fbl
                                5
                                yt-link
                                5
                                adc模块
                                4
                                Online Users
                                xianghanX
                                xianghan
                                YQHY
                                YQH
                                OliverChenO
                                OliverChen
                                爪云爪
                                爪云
                                ysogY
                                ysog
                                DerrickD
                                Derrick
                                runR
                                run
                                zz666Z
                                zz666
                                xiangyuX
                                xiangyu
                                Tiger987T
                                Tiger987
                                WRW
                                WR
                                BoqiangHaoB
                                BoqiangHao
                                yt0503Y
                                yt0503
                                swordsS
                                swords
                                liuxu_smartensL
                                liuxu_smartens
                                monM
                                mon
                                • 登录

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