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

YunTu Forum

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

请教关于Fls写数据问题。

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

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

      image.png

      yxydoctorY 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
                  • ,FrankieF Frankie 将这个主题转为问答主题
                  • ,FrankieF Frankie 将这个主题标记为已解决

                • 云途开发生态介绍

                  快速上手云途开发生态

                • 云途论坛规则/Yuntu Forum Rules

                  发帖前请查看

                • YT CONFIG TOOL调查问卷

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

                • can
                  25
                  demo
                  23
                  lin stack
                  13
                  uds
                  13
                  md14
                  6
                  yt-link
                  6
                  fbl
                  5
                  adc模块
                  4
                  Online Users
                  ericE
                  eric
                  lhvL
                  lhv
                  RuiXuR
                  RuiXu
                  好运好
                  好运
                  ixhsunI
                  ixhsun
                  chenchaoC
                  chenchao
                  FrankieF
                  Frankie
                  xianghanX
                  xianghan
                  D
                  Derrick
                  WRW
                  WR
                  bhhzyB
                  bhhzy
                  jyJ
                  jy
                  • 登录

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