首页 > 其他分享 >驱动仅提供32位刷写的情况下如何完成刷写单数字节

驱动仅提供32位刷写的情况下如何完成刷写单数字节

时间:2023-08-15 13:22:33浏览次数:44  
标签:字节 一包 32 全字 0xFF 刷写

[Ooonly]

前情提要:需要刷写一整个app程序,分包刷写,每包字节数为单数,要求CRC校验正确。(芯片底层提供32位全字刷写和16位半字刷写,驱动只整合了32位全字刷写函数)

使用32位刷写函数出现的现象:通过keil5观察内存空间发现一包刷写成功一包刷写失败一包刷写成功...一直循环到末尾,刷写失败的包开始几个字节为乱码,不是包中的内容,且后面为全0xFF。


一、分析问题原因

首先理解驱动中32位写入内存函数刷写单数字节是如何处理的,在每次刷写完一次4字节之后,判断该包剩余未刷写字节数是否小于4,若小于4则补充0xFF至4个字节后一次刷入4字节结束。

出现问题,由于一个完整的app程序要求每个包中间是完美连接的,即一个分包的末尾字节的下一个字节为下一包的首字节。此时一个包的末尾字节后有刚刚补充的0xFF,内存通常在一次刷写之后会自动加上写保护,再次擦除之后才可再次刷写。

一包刷写成功之后,下一包的首字节刷写地址和上一包末尾补充0xFF冲突,造成刷写失败写入随机非0乱码。

二、解决方法

更改驱动中32位全字刷写函数,更改逻辑为:当前包刷写剩余字节数小于4时,将剩余字节按顺序放入一个4字节缓存中,并记录下剩余字节个数。当下一包开始刷写时,刷写地址需减去上一包剩余字节个数,并从首字节开始补充上述4字节缓存,形成一个由上一包的尾字节与当前包首字节组成的4字节全字刷写。最后需要额外判断整个app是否即将刷写完成,若当前包为最后一包,那么就没有下一包来补充含有剩余字节的4字节缓存,此时按原有逻辑补充0xFF进行32位全字刷写。


三、注意事项

由于该全字刷写函数不一定只有app刷写功能调用,还有例如参数保存等功能调用,所以建议使用宏定义,若不是app刷写功能则32位全字刷写函数内容与原来保持一致。作者并因为是新手,对宏定义理解不深刻,并没有第一时间想到这种操作方式,使用if-else也实现了,但是想起来好像宏定义更好看一点,哈哈。有想法、问题、意见可以评论或私信提出,欢迎交流转载。

以上就是今天要讲的内容,感谢您的关注。

标签:字节,一包,32,全字,0xFF,刷写
From: https://www.cnblogs.com/Ooonly/p/17631066.html

相关文章

  • VTK 实例32:图像重采样(降采样)
    1#include"vtkAutoInit.h"2VTK_MODULE_INIT(vtkRenderingOpenGL2);3VTK_MODULE_INIT(vtkInteractionStyle);45#include<vtkSmartPointer.h>6#include<vtkImageData.h>7#include<vtkImageShiftScale.h>8#include<......
  • 字节码的终极应用-GitHub高星开源APM项目之Pinpoint
    大家好,我们前面的章节javaagent以及一些字节码修改框架ASM和Javassist,以及他们的一些简单的应用场景.今天重点给大家介绍一款github上开源的APM分布式链路监控产品--Pinpoint.Pinpoint是什么?Pinpoint是一个开源的APM(ApplicationPerformanceManagement/应用性能管理......
  • 字节码角度看synchronized和反射的实现原理
    前几天,关于字节码技术,我们讲了字节码的基础,常见的字节码框架以及在软件破解和APM链路监控方面的一些应用.今天我们回到Java本身,看下我们常用的synchronized关键字和反射在字节码层面是如何实现的.synchronized代码块级别的synchronized如下方法的内部使用了synchronized......
  • 【字节跳动】9-22秋招测试开发一面面经
    作者:洛枫、1、接口如何保证幂等2、数据库索引种类按数据结构分类可分为:B+tree索引、Hash索引、Full-text索引。按物理存储分类可分为:聚簇索引、二级索引(辅助索引)。按字段特性分类可分为:主键索引、普通索引、前缀索引。按字段个数分类可分为:单列索引、联合索引(复合索引、组合......
  • stm32cubemx 配置波特率
    1、参考链接:https://www.cnblogs.com/forever-youth/p/15807690.html 2、步骤:   1、先算出连接can总线的PCLK1时钟频率   2、再根据公式:can波特率=pclk1/((tbs1+tbs2+sync_seg)*brp)     其中PCLK1就是时钟频率,sync_seg一般默认固定为1   ......
  • 删数问题 洛谷p1323
    决定做一系列贪心,贪心真的,最早学的算法,到现在还有时候不太敢贪,还贪不来,一直挺逃避贪心问题的。。 删除前的数字可以先用优先队列对所有数字进行预处理,数据范围是3e4,也不是很大,直接全部处理了吧。constintN=1e5+10,inf=0x3f3f3f3f3f3f3f3f,MAX=3e4+10;inta[N]......
  • XCVU9P板卡设计原理图:509-基于XCVU9P的32路光纤PCIeX16收发卡
    基于XCVU9P的32路光纤PCIeX16收发卡 一、板卡概述    基于XCVU9P的32路光纤PCIeX16收发卡。该板卡要求符合PCIe3.0标准,包含一片XCVU9P-2FLGA2014I、4组64-bit/8GBDDR4;2路SNAP12X光纤,每路光纤支持12X10Gbps,双向;2路QSFP+4X光纤,每路光纤支持4X25Gbps,双向;支持32路IO。板......
  • 【题解】洛谷 P9532 [YsOI2023] 前缀和
    原题链接【LGR-151-Div.2】洛谷8月月赛II&YsOI2023T1解题思路设有一序列a,其中a1 =a2,第k(≥3) 项为前k-1项的前缀和。可以发现前q项分别为第一项的20 倍,20 倍,21 倍,22 倍,23 倍…2q-3 倍,2q-2 倍。扩展到整个序列中,可得第i( ≥ 3)项一定为2i-2a1。......
  • 关于CH32系列MCU SDI虚拟串口功能的使用
    该功能需要配合EVT对应例程以及对应WCH-LinkUtility工具使用,WCH-LinkUtility下载链接如下:https://www.wch.cn/downloads/WCH-LinkUtility_ZIP.html该功能目前仅支持以下型号MCU,如下图,且需要配合WCH-LinkE使用,具体可见WCH-Link使用说明5.2.11小节,WCH-Link使用说明下载链接如下:ht......
  • 苹果新一代“超级芯片”曝光:M3 Ultra最高可达32核CPU
    近日,据外媒消息,苹果计划在2024年推出新一代“超级芯片”M3Ultra。据悉,M3Ultra将大幅增加CPU核心数量,同时GPU核心数量也将适度增加。具体来说,M3Ultra与此前M2Ultra的规格对比如下:基础版M3Ultra规格:32核CPU,包括24个性能核和8个效率核,64核GPU;基础版M2Ultra规格:24核CPU,包括1......