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

YunTu Forum

YTMicro.com
  1. 主页
  2. Discussion & Question
  3. YTM32B1H系列
  4. 请教关于Fls写数据问题。

请教关于Fls写数据问题。

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

    之前在z20上跑通过Fls +LittleFs文件系统。本以为移植过来很简单因为都是Fls。
    移植过来后文件系统挂载不了,之后试跑官方Fls例程是可以的,再把例程移植到自己的工程后也是通的。
    调试过程中有时候会出现连接错误:
    size(block DATA_RAM_block) = 256 (0x100)
    size(block DATA_RAM_rom_block) = 252 (0xfc)
    查看论坛帖子后,把DATA_FLASH 和 DATA_RAM都改为aligned (8)后此现象消失,但文件系统还是不行。

    虽然例程是通的,但例程在擦除dflash扇区后,写操作数据量是0x800,即2048字节,如果改为32,128等数,写操作似乎是失效的,但读操作没有影响,或许这就是文件系统挂载失败的原因。烦请帮忙解决一下,谢谢了。

        // step I :擦除一个扇区
        Fls_Erase(0, 2048);
        do{
          Fls_MainFunction();
        } while (Fls_GetStatus() != MEMIF_IDLE);
    
        // step II: 写数据
        for(LoopCnt= 0; LoopCnt< 0x800; LoopCnt++)Fls_WriteData[LoopCnt] = LoopCnt%0x100U;
        Fls_Write(128, Fls_WriteData, 32);
        do{
          Fls_MainFunction();
        } while (Fls_GetStatus() != MEMIF_IDLE);
    
        // step III:读数据
        for(LoopCnt = 0; LoopCnt < 128; LoopCnt++) Fls_ReadData[LoopCnt] = 0;  
        Fls_Read(128, Fls_ReadData, 32);
        do{
          Fls_MainFunction();
        } while (Fls_GetStatus() != MEMIF_IDLE);
    
    1 条回复 最后回复
    0
    • yxydoctorY 离线
      yxydoctorY 离线
      yxydoctor
      写于 最后由 编辑
      #2

      应该是扇区擦不掉,所以write也不行。原代码是这样的:

      static int32_t mflash_drv_sector_erase(uint32_t sector_addr)
      { 
          // 扇区对齐
          if (0 == mflash_drv_is_sector_aligned(sector_addr)){
              while(1); 
          } 
          if(Fls_Erase(sector_addr, MFLASH_SECTOR_SIZE) != E_OK){
              while(1);
          }
          while(MEMIF_IDLE != Fls_GetStatus()){
              Fls_MainFunction();
          } 
          if(Fls_GetJobResult() != MEMIF_JOB_OK){
              while(1);
          }
          return 0;  
      }
      

      但云图平台下调用Fls_GetJobResult()会失效。

      1 条回复 最后回复
      0
      • yxydoctorY 离线
        yxydoctorY 离线
        yxydoctor
        写于 最后由 编辑
        #3

        实锤了,Fls_Erase()函数定义跟z20不一样,z20扇区指的是物理扇区尺寸,而32B1H此处指的是逻辑扇区尺寸。
        Fls_Erase(0, 4096); 这个4096为逻辑扇区。
        按理说这种标准函数不应该有歧义才对。

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

          Autosar的Fls模块将MCU的Fls抽象为逻辑sector, 从而操作理论上应该都按照逻辑sector的概念进行。

          image.png

          yxydoctorY 1 条回复 最后回复
          0
          • yxydoctorY 离线
            yxydoctorY 离线
            yxydoctor
            在 回复了 houjun_xiao 最后由 编辑
            #5

            houjun_xiao 这里面提到的flash sector指的应该就是物理扇区,云途ic的dflash扇区固定是1K。不应该是YTC里面的FlsSector尺寸。

            但实际上云途提供的Fls_Erase()必须按FlsSector尺寸进行擦除。结果就是为移植128KB文件系统,就需要用YTC手动创建128个1K字节的FlsSector

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

              操作上有需求把多个物理sector抽象为一个逻辑的setor,那么理论上被抽象的这几个sector可以认为是一个逻辑整体,从而在被擦除的时候作为整体操作是否更方便管理一些。当然你提的这个sector的问题我再核对一下标准,后面可以根据标准进行处理。如果你现在需要按照物理sector长度擦除DFLASH,需要按照1k大小配置flash sector.

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

                还是先核实一下标准吧。
                调通后文件系统还不错,32k分区建立俩互为备份还不错,测了一下午,基本写周期3ms,最大50ms。

                1 条回复 最后回复
                0

              • 云途论坛规则/Yuntu Forum Rules

                发帖前请查看

              • YCT离线License申请流程

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

              • YT CONFIG TOOL调查问卷

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

              • demo
                12
                can
                9
                lin stack
                6
                yt-link
                5
                vscode
                3
                adc模块
                2
                i2c
                2
                uuid
                2
                Online Users
                KeanuChenQAQK
                KeanuChenQAQ
                jankyJ
                janky
                kasselK
                kassel
                YTCQ_shejiwangY
                YTCQ_shejiwang
                • 登录

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