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

YunTu Forum

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

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

已定时 已固定 已锁定 已移动 YTM32B1L系列
15 帖子 5 发布者 332 浏览
  • 从旧到新
  • 从新到旧
  • 最多赞同
登录后回复
此主题已被删除。只有拥有主题管理权限的用户可以查看。
  • 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
                            • 版块
                            • 最新
                            • 标签
                            • 热门