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

这篇具有很好参考价值的文章主要介绍了驱动仅提供32位刷写的情况下如何完成刷写单数字节。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

[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也实现了,但是想起来好像宏定义更好看一点,哈哈。有想法、问题、意见可以评论或私信提出,欢迎交流转载。

以上就是今天要讲的内容,感谢您的关注。文章来源地址https://www.toymoban.com/news/detail-648820.html

到了这里,关于驱动仅提供32位刷写的情况下如何完成刷写单数字节的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 字节跳动AB实验经验分享:企业如何构建数据驱动的实验文化?

    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 近日,CCF TF 举办了第 123 期分享活动,本期主题为“用户体验工程”。 CCF TF 是中国计算机学会为企业界计算机专业人士创建的企业间常态化合作交流平台,本期分享邀请到了来自火

    2024年02月05日
    浏览(57)
  • 跨域情况下,vue如何下载后台接口提供的application/octet-stream文件流Excel文件

    由于跨域,所以无法直接通过window.location.href或者a标签直接下载,直接拼后台接口地址又暴露了后台地址,不可行。 所以在这种跨域情况下,本章讲一下vue如何下载后台接口提供的application/octet-stream文件流Excel文件。 实现前端vue下载后台返回的application/octet-stream文件流 1、使

    2024年02月14日
    浏览(38)
  • STM32F103RCT6驱动SG90舵机-完成正反转角度控制

    SG90是一种微型舵机,也被称为伺服电机。它是一种小型、低成本的直流电机,通常用于模型和机器人控制等应用中。SG90舵机可以通过电子信号来控制其精确的位置和速度。它具有体积小、重量轻、响应快等特点,因此在各种小型机械设备上得到了广泛应用。 SG90舵机通常用于

    2024年02月03日
    浏览(50)
  • nxp s32k144芯片使用J-LINK程序刷写

    1.nxp s32k144 (1)打开软件:J-Flash V6.30j (2)新建工程:file-new project (3)选择芯片型号和 target interface (4)可以保存芯片和接口配置 (5)打开程序:File-open data file (6)程序刷写:Target-Production Programming (7)连接不成功的话,可以检测下Jlink的排线有无接反。 检查下Jlink盒子内部的供电

    2024年01月16日
    浏览(49)
  • 非华为机型如何体验HarmonyOS鸿蒙系统 刷写HarmonyOS鸿蒙GSI系统以及一些初步的bug修复

    最近很多视频网站有非华为机型使用HarmonyOS鸿蒙系统的演示。其实大都是刷了HarmonyOS鸿蒙系统gsi系统。体验还可以。有些刷入后bug较多。那么这些机型是如何刷写gsi?可以参考我以往帖子 安卓玩机搞机-----没有第三方包 刷写第三方各种GSI系统 体验非官方系统_gsi刷机包_安卓机

    2024年02月09日
    浏览(39)
  • Windows配置IP时弹窗:出现了一个意外的情况,不能完成你在设置中所要求的更改

    问题描述: 解决办法:以管理员身份打开cmd, 手动配置IP方法:输入 netsh interface ip set address “以太网” static 192.168.0.8 255.255.255.0 192.168.1.1 然后敲回车,如果没有任何提示,说明设置静态ip地址成功。192.168.0.8是ip地址,255.255.255.0是子网掩码,192.168.0.1是网关,同样方法可以设

    2024年02月16日
    浏览(67)
  • 修改网络地址ip时出现“出现了一个意外的情况。不能完成所有你在设置中所要求的更改。”

    解决办法: win+R,输入cmd;以管理员的身份运行 出现命令提示符窗口后,输入一下2条指令 tcp-ipv4的ip地址及NDS将会更改为自动获取; 输入以下2条指令 将会设置成自己所想要的设置的ip地址。 注: 出现该问题可能是因为自己在移动硬盘上面装载了vmware所导致的。Vm会装虚拟网

    2024年02月05日
    浏览(90)
  • 【STM32】驱动库的选择:CMSIS Driver、SPL、HAL、LL | 在ARM MDK、STM32Cube中如何选择?

    阅读本专栏其他文章,有助于理解本文。👆 STM32开发相关的库有很多,它们都是为了方便开发者使用STM32微控制器而提供的软件工具。根据不同的功能和层次,可以将它们分为以下几类: CMSIS库(准确来说是CMSIS pack) ( Cortex Microcontroller Software Interface Standard )是 ARM公司 推

    2024年02月11日
    浏览(34)
  • 解决Win10IP设置出错:“出现了一个意外的情况,不能完成所有你在设置中所要求的更改”

    在学校链接校园网或者使用分配IP进行联网,需要修改IP等,有时出现“出现了一个意外的情况,不能完成所有你在设置中所要求的更改”的错误。解决方法如下: 1.搜索栏cmd,右键 管理员身份 打开命令提示符 2.输入 netsh 回车,在输入 interface 回车 3.输入 ip 回车 4.输入IP地址

    2024年02月04日
    浏览(68)
  • AI 驱动的代码在 90 秒内完成

    在快速发展的软件开发环境中,高效准确的编码至关重要。隆重推出 Tabnine,这是一款高级 AI 助手,旨在彻底改变软件开发人员的编码体验。Tabnine利用生成式 AI 技术的力量,根据上下文和语法预测和建议您的下一行代码,使您能够更快、更准确地编写代码。 通过整行和全功

    2024年02月08日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包