打印
[应用相关]

DFU文件下载又遇到问题,火烧眉毛了.

[复制链接]
7672|21
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
mzscg|  楼主 | 2008-7-29 10:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我将BMP文件直接修改后缀,变为.bin文件(论坛里许多人说是可以这样做的)

然后用ST的dfu file manager将.bin文件转换为.dfu文件,(文件大小基本与一样,提示转换成功了)

然后到dfuse demo下,在upgrade or verify action 右边点choose,选择转换好的
.dfu文件,显示:TARGET:file correctly loaded.

但是,点upgrade后,再现:target01:Unable to find data for that device /target from the file.
贴图如下(无法贴图)


请问是什么原因。。
沙发
mzscg|  楼主 | 2008-7-29 10:38 | 只看该作者

自己先让贴浮起来,现在头大得要命。。

没有顺利过。。

使用特权

评论回复
板凳
香水城| | 2008-7-29 10:54 | 只看该作者

估计你没有选择或没有选对目标芯片

.dfu文件中必须包含目标芯片和目标固件的版本号。

这些信息是为了保证不会把不相干的程序下载到应用目标中,否则轻则下载的程序不工作,重则目标产品因为错误的程序被烧坏。

使用特权

评论回复
地板
mzscg|  楼主 | 2008-7-29 11:04 | 只看该作者

回香水,目标芯片选择了SPI flash:m25p64

香水你的话让我又掉进了冰窟, 

我仔细叙述一下我的初衷吧:

1,我用的是ST的开发板:STM3210B

2,现在我想在 STM3210B给的demo (大家应该知道吧)的框架上,用我的bmp位图更换
掉demo里面的位图(demo的位图目前依然存放在m25p64里),其他部分做一些简单修改,得到自己的GUI,

3,根据香水的话:  我这种作法是不能用DFU了吗? 我是打算将所有位图存放在片外的flash上(m25p64),   

谁能告诉我,我该怎么做???

使用特权

评论回复
5
香水城| | 2008-7-29 11:20 | 只看该作者

DFU适用于产品发布之后对固件程序进行更新

既然是更新,就必须要求更新下去的程序与原程序同出一辙。

我不知道你为什么选择了DFU,也许你的需求不用这么麻烦。

如果只是使用STM32烧写Flash,完全可以使用其他方法,比如使用UART接收数据,再写入Flash。

使用特权

评论回复
6
vigia| | 2008-7-29 11:42 | 只看该作者

最简单的做法

找个BIN到HEX的工具,弄个位图的数组出来。

找个ST写SPI FLASH的DEMO,把你的数组编译到这个项目里,直接在项目里把数组写到flash里去。

使用特权

评论回复
7
mzscg|  楼主 | 2008-7-29 11:43 | 只看该作者

回香水,我也这么想过,我电脑没串口,对自己无语了

这样说吧,
香水你研究过st开发板给的demo吧,
他们是怎么将bmp写到片外的m25p64里面去的呢???

我需要简便的方法,,,不然我真的要换一台电脑了...
用USB总可以吧.....研究US传输去.....

使用特权

评论回复
8
mzscg|  楼主 | 2008-7-29 11:53 | 只看该作者

回vigia,一个位图150KB,怎么执行?

我的STM32:  FLASH 128kB, SRAM:20KB,

这样可以传到flash里吗???   也只有通过串口线来传到片外flash了.

使用特权

评论回复
9
vigia| | 2008-7-29 11:57 | 只看该作者

额,也是。。。

我记得圈圈写过一个ST的USB传输例子和上层驱动的吧,要不找他借借。。。

使用特权

评论回复
10
香水城| | 2008-7-29 12:00 | 只看该作者

如果只是要求一次性地把bmp文件放到Flash中,可以分段操作

比如按照6楼的方法,把150KB分为3段,把50KB的数据包含到程序中,每次烧写50KB,3次就完成了。

使用特权

评论回复
11
mzscg|  楼主 | 2008-7-29 13:48 | 只看该作者

回楼上的,我需要存许多bmp,这种方法不适用啊

圈圈,,我找他一下.

香水,ST有写过用USB从PC传输到STM32的吗????只要有这个,一切就搞定了.我快崩溃了.

使用特权

评论回复
12
香水城| | 2008-7-29 13:52 | 只看该作者

那么你可以试试使用ST提供的USB虚拟串口的例子

你的问题在于你没有相关的系统知识,想用USB又没有USB的知识,所以遇到问题不知所措,这样的问题一时半会儿是解决不了的。

使用特权

评论回复
13
mzscg|  楼主 | 2008-7-29 14:11 | 只看该作者

回复香水,是,,接触底层不久

基本上大部分东西都是一边学一边做,
我现在只有寻求通过USB,
有问题以后还得向你请教,呵呵,,,我顶住..

使用特权

评论回复
14
computer00| | 2008-7-29 14:17 | 只看该作者

使用USB做成虚拟串口的方案是可以的

这样的话你通过上位机使用串口发送数据,但是实际数据是发送到USB口的,在设备端某个批量端点可以接收到这些数据。
但是这里有个问题就是流控制。如果使用串口调试助手之类的来发,虚拟串口我还不知道如何使用硬件流控制,因为从
我制作的USB转串口的情况来看,似乎主机从来都未请求过串口流控制线的状态...

当然,用软件流控制是肯定可以的,这需要楼主自己开发一个上位机的应用软件来访问串口(访问WDM驱动,
不要直接去访问串口的端口),不知道楼主是否有这个时间。

理论上,使用DFU的方案肯定也是可以行得通的,问题在于楼主对这个USB协议以及DFU协议不大熟悉,
所以搞起来可能会麻烦些。固件更新,无非就是将一些数据发送给设备,然后由设备把数据写到存储器
中,至于数据是写到哪去的,完全是由设备自己来决定的。如果长度太长的话,应该还需要修改相关描述符。

至于我那个驱动,不建议使用,因为有时插上设备时会导致系统蓝屏,至于原因是什么,我还没搞清楚...
估计是DS自动生成的代码有点小问题。

如果你会USB HID设备的话,也可以考虑使用自定义的HID设备,设置查询时间为1ms,包最大长度为64字节,
理论上可以达到64KB/s的速度,对于你几百K的图片,下载一个需要几秒钟,还可以接受了。

我觉得最好的办法其实还是做成USB大容量存储设备,在FLASH上做个FAT12的文件系统,
在电脑端直接把文件复制进去即可,方便得很。不过这个方案也许会让楼主花更多的时间……

使用特权

评论回复
15
mzscg|  楼主 | 2008-7-29 14:39 | 只看该作者

多谢computer00蝈蝈,我还是静下来研究USB协议.

心情很焦急,,但也得忍啊,

非常感谢这么多兄弟出谋献策...

使用特权

评论回复
16
xwj| | 2008-7-29 14:48 | 只看该作者

computer00蝈蝈

蝈蝈是不是蛐蛐???

使用特权

评论回复
17
vigia| | 2008-7-29 14:52 | 只看该作者

LZ你非要USB的话VCD确实比DFU简单多了

你看看usb_endp.c的
void EP3_OUT_Callback(void)
{
  count_out = GetEPRxCount(ENDP3);
  PMAToUserBufferCopy(buffer_out, ENDP3_RXADDR, count_out);
  SetEPRxValid(ENDP3);
}

USB数据直接在这个中断里拷贝到buffer_out里了,不过现在的函数是只收一次的,如果发的数据超过64字节,buf就要被冲掉了,关于这些的控制你还得自己改改。我没仔细看过这个项目,不过好像是没看到关于流量的控制。

使用特权

评论回复
18
香水城| | 2008-7-29 14:56 | 只看该作者

我的理解是USB虚拟串口的流量控制是由USB驱动解决的

USB转COM的驱动负责控制流量,所以用户不必操心。在USB设备端,当设备来不及响应主机的请求只需使用NAK,USB主机会择机重发,不会发生数据丢失的。

使用特权

评论回复
19
computer00| | 2008-7-29 15:02 | 只看该作者

老X就知道瞎搅和...

香主说的是,的确是由USB驱动负责了流控制,我一下脑袋短路,又回到了标准串口去了……晕……
发送数据驱动应该也没有做超时限制的。

看来用虚拟串口是个不错的选择。

使用特权

评论回复
20
mzscg|  楼主 | 2008-7-29 16:28 | 只看该作者

俺决定直接在程序里放数组数据来传,,呵呵

决定试一下,谁推荐一个能 从BMP里直接读出 十六进制数的工具????

而且十六进制数还带0x的,,,我下了几个,都没有带0x的....郁闷..

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

234

帖子

0

粉丝