搜索
bottom↓
回复: 15

[解决]提取PC发的bin?stm32 USB IAP帖子很多没提文件存放问题

[复制链接]

出0入99汤圆

发表于 2020-1-10 08:27:21 | 显示全部楼层 |阅读模式
本帖最后由 lovewind 于 2020-1-10 10:11 编辑

看了很多帖子,少数提到了一些东西,经过测试,得出经验,我用的是cubeMX生成的HAL格式的库,其他的库其实差不多,主要是两个函数:读函数,写函数,我们要在这两个函数里面实现数据操作

heap_size开到0x400,默认是0x200

如果需要电脑帮你格式化,你需要提供20K的 RAM(或者FLASH,懒得写flash函数可以用RAM代替)

如果免格式化,RAM需要就很少很少了,原理是RAM的前512字节(0扇区)你写好了格式化之后的mbr表,忽悠电脑认为你已经格式化了。电脑就可以直接显示盘符了。

问题来了:一个bin文件或者txt文件丢进U盘,有的写到就从写函数进来了,但是我昨天测试发现,才开始的进来的数据并不是文件本体,而是一些格式和大量的000000000000000000000000,
看样子写了好几遍,不知道是不是需要写入才开始的文件表,我没让他写或者处理好?
最后还是看到成功了,当然,打开文件是空的,因为我没有写函数,只是把内容转发到串口了而已

应该怎么才能提取到发送的文件本体信息呢,这个格式应该是FAT12格式,估计是容量太小几百K,电脑就认为是FAT12比较合适吧。
大概我知道一些,就是格式化肯定是写了文件表,而且应该不只是0扇区,还有其他几个记录信息的扇区吧。。。

问题:从第几个扇区开始,算是bin文件本体的起始,结束点在哪里呢?

补充:-----------------------------------------------

用串口看了下,
以下是插到第一次的电脑的规律
读0,读0,读2
读0,5次
读1,2,3,4,5-------------15
读0,读0,读1-12,
读2,读37,写5-12,(仅5有数据)
写1,写3,写37(有数据)
写37(有数据)  
写38(有数据)
写39(有数据)这就是为什么之前测试用RAM的话,需要20K才可以正常格式化的原因
写37(有数据),写1,写3,
读0-15
读0-15

以下是写的规律
先写0,MBR表
再写5,好像是文件目录,可以看到刚才传文件的文件名和第二次传的文件名
写678910 11 12都是00000000000
然后,就又写1看不出来是什么
写3,和1几乎一样的数据
再写5,同上5
写678910 11 12都是00000000000
------------------------------------------------
写41文件开始
********
写到144
------------------------------------------------
又写0,MBR表
写1,写3同上1,3
写5,同上5
写678910 11 12都是00000000000
写5,同上5
写678910 11 12都是00000000000
写1,3,同上1,3
写0,MBR表
写1,3同上1,3

已经找出规律,只要里面没有文件,文件都是从第40开始写入的,现在只要知道文件结束位置就好办了只要大于这个都是文件的数据。提取收到的文件也容易了。
其中5是目录,至少是第一目录文件名所在地
放入文件顺序是:
写5文件名,写6-12
两遍
写1,3
写5文件名,写6-12
两遍
写40文件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

发表于 2020-1-10 08:34:45 | 显示全部楼层
bin文件不含地址 你需要自己定起始地址 根据你自己的程序大小自己划分哪些扇区存哪些内容 另外bin文件的内容直接往FLASH写就行

出0入0汤圆

发表于 2020-1-10 08:35:15 | 显示全部楼层
跑个文件系统,就可以读取bin内容了

出0入22汤圆

发表于 2020-1-10 08:38:39 | 显示全部楼层
老铁,写东西是先写文件表最后才写文件,你通过写入地址就能判断写的是什么

出0入99汤圆

 楼主| 发表于 2020-1-10 08:39:24 | 显示全部楼层
Athelloren 发表于 2020-1-10 08:34
bin文件不含地址 你需要自己定起始地址 根据你自己的程序大小自己划分哪些扇区存哪些内容 另外bin文件的内 ...

前提是你不知道USB进来的数据哪里是bin或者其他文件的开始,任何文件本身都不一定是有自己的地址,他只是一大坨数据,怎么放的前提是识别他的存放规则(如果有文件系统帮你存放了),从哪里到哪里是数据本身,一般帖子都没说这个细节且很重要。。。当然楼下说的是跑一个文件系统(其实帮你找到了),但是我们这个IAP只需要知道数据从哪到哪里,自己写到flash就行了。什么文件名啊,那些多余的信息都可以不要

出0入99汤圆

 楼主| 发表于 2020-1-10 08:41:31 | 显示全部楼层
jiaowoxiaolu 发表于 2020-1-10 08:38
老铁,写东西是先写文件表最后才写文件,你通过写入地址就能判断写的是什么 ...

哈哈,看到你的帖子了和博客了,现在我就是不知道文件表的扇区范围,文件内容的范围,比如现在USB进来了一个文件,如果写123我知道是文件表的操作,124是目录操作,125是文件,那就好办了。如果知道直接识别就可以提取出来了哈,

出0入0汤圆

发表于 2020-1-10 08:41:41 | 显示全部楼层
lovewind 发表于 2020-1-10 08:39
前提是你不知道USB进来的数据哪里是bin或者其他文件的开始,任何文件本身都不一定是有自己的地址,他只是 ...

你这是把芯片作为了U盘来实现IAP升级,需要知道文件名呀

出0入99汤圆

 楼主| 发表于 2020-1-10 08:43:12 | 显示全部楼层
stm32_bldc 发表于 2020-1-10 08:35
跑个文件系统,就可以读取bin内容了

那就太没必要了,IAP升级不是问了存放文件系统能识别的格式,是提取有效信息就行了

出0入0汤圆

发表于 2020-1-10 08:44:03 | 显示全部楼层
lovewind 发表于 2020-1-10 08:39
前提是你不知道USB进来的数据哪里是bin或者其他文件的开始,任何文件本身都不一定是有自己的地址,他只是 ...

我一般是上位机直接读取bin文件 然后按1K或2K大小往单片机发bin文件 只用过串口和CAN USB没用过 不过应该和串口和CAN类似 包含帧头 指令码 长度 校验等 单片机把这些去了直接往里写就行

出0入99汤圆

 楼主| 发表于 2020-1-10 08:44:21 | 显示全部楼层
596142041 发表于 2020-1-10 08:41
你这是把芯片作为了U盘来实现IAP升级,需要知道文件名呀

不需要,一次性的,进来了就提取有用的,信息了,那些没用的丢掉就行了。。。。目的是为了要文件本身的有效信息,U盘是为了转存,还要再拿出去的,所以需要文件系统完整存放

出0入99汤圆

 楼主| 发表于 2020-1-10 08:45:43 | 显示全部楼层
Athelloren 发表于 2020-1-10 08:44
我一般是上位机直接读取bin文件 然后按1K或2K大小往单片机发bin文件 只用过串口和CAN USB没用过 不过应该 ...

串口的是发送软件和接收直接自己知道的协议,USB传输,也是有自己的格式协议,所以我是想知道有效信息的提取办法

出0入99汤圆

 楼主| 发表于 2020-1-10 09:17:14 | 显示全部楼层
jiaowoxiaolu 发表于 2020-1-10 08:38
老铁,写东西是先写文件表最后才写文件,你通过写入地址就能判断写的是什么 ...

用串口看了下,
先写0,MBR表
再写5,好像是文件目录,可以看到刚才传文件的文件名
写678910 11 12都是00000000000
然后,就又写1看不出来是什么
写3,和1几乎一样的数据
再写5,同上5
写678910 11 12都是00000000000
------------------------------------------------
写41文件开始
********
写到144
------------------------------------------------
又写0,MBR表
写1,写3同上1,3
写5,同上5
写678910 11 12都是00000000000
写5,同上5
写678910 11 12都是00000000000
写1,3,同上1,3
写0,MBR表
写1,3同上1,3

出0入0汤圆

发表于 2020-1-10 09:36:47 | 显示全部楼层
USB接口框图如图:

读写内容与文件系统相关。

出0入99汤圆

 楼主| 发表于 2020-1-10 09:50:44 | 显示全部楼层
styleno1 发表于 2020-1-10 09:36
USB接口框图如图:

读写内容与文件系统相关。

感谢感谢,可是完全看不懂,这个不需要写底层驱动,只是再数据扇区交互这个地方,所以我现在在用串口找规律

出0入442汤圆

发表于 2020-1-10 12:51:17 来自手机 | 显示全部楼层
styleno1 发表于 2020-1-10 09:36
USB接口框图如图:

读写内容与文件系统相关。

usb msc只决定了扇区读写的方法,但是不包括文件系统。

出0入8汤圆

发表于 2020-1-10 13:12:18 来自手机 | 显示全部楼层
找本fat协议的书看看,你就知道数据是在什么时候写的了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-25 13:51

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表