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

YunTu Forum

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

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

已定时 已固定 已锁定 已移动 已解决 YTM32B1L系列
15 帖子 5 发布者 3.9k 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 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
    • pengh1994P 离线
      pengh1994P 离线
      pengh1994
      在 回复了 houjun_xiao 最后由 编辑
      #9

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

      D YQHY 2 条回复 最后回复
      0
      • yangkeY 离线
        yangkeY 离线
        yangke YunTu
        写于 最后由 编辑
        #2

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

        pengh1994P 1 条回复 最后回复
        0
        • D 离线
          D 离线
          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
            在 回复了 yangke 最后由 编辑
            #4

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

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

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

              D 1 条回复 最后回复
              0
              • D 离线
                D 离线
                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呢?

                      D YQHY 2 条回复 最后回复
                      0
                      • D 离线
                        D 离线
                        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了。

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

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

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

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

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

                                  image.png

                                  1 条回复 最后回复
                                  0
                                  • ,FrankieF Frankie 将这个主题转为问答主题
                                  • ,FrankieF Frankie 将这个主题标记为已解决

                                • 云途开发生态介绍

                                  快速上手云途开发生态

                                • 云途论坛规则/Yuntu Forum Rules

                                  发帖前请查看

                                • YT CONFIG TOOL调查问卷

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

                                • can
                                  25
                                  demo
                                  22
                                  lin stack
                                  13
                                  uds
                                  13
                                  md14
                                  6
                                  yt-link
                                  6
                                  fbl
                                  5
                                  adc模块
                                  4
                                  Online Users
                                  loganL
                                  logan
                                  • 登录

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