打印

秀个好玩的,无驱无上位机软件的stm32 usb bootloader,开源main.c

[复制链接]
12437|29
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
Simon21ic|  楼主 | 2012-12-28 23:58 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 Simon21ic 于 2013-1-4 21:39 编辑

看到21ic论坛里有人说开源不好,这个东西就不开源了,纯无聊秀秀,不销售,所以没有广告嫌疑
改了一下,作为stm32编程器确实没有什么意义,不过如果作为stm32的usb bootloader,确实还可以用用,就开源个main.c吧。

1. USB无驱,这个不难,很多设备都可以是无驱的,包括HID,MSC,RNDIS等等
2. 无上位机软件,这个其实只是用了操作系统自带的上位机软件而已
    当然做这个肯定不是为了编程stm32,只是随便玩玩的东西。目前主要实现了2套方案,一套是RNDIS设备,实现一个http服务器(当然其他的也可以),上位机软件是网页浏览器,相对比较复杂。另一套比较简单的,MSC,上位机是文件浏览器,模拟一个FAT32文件系统,把stm32的flash映射到一个文件,对这个文件的读写就可以对stm32的flash读写,不过文件有4G的限制。

show部分代码:
static vsf_err_t ReadFlash(struct fakefat32_file_t*file, uint32_t addr,
                                                                        uint8_t *buff, uint32_t page_size);
static vsf_err_t ReadInfo(struct fakefat32_file_t*file, uint32_t addr,
                                                                        uint8_t *buff, uint32_t page_size);
struct fakefat32_file_t root_dir[] =
{
        {
                "MSC_MEM ",
                FKAEFAT32_FILEATTR_VOLUMEID,
        },
        {
                "MEMORY  BIN",
                FAKEFAT32_FILEATTR_ARCHIVE | FAKEFAT32_FILEATTR_READONLY,
                512,
                {ReadFlash, NULL, NULL, NULL},
        },
        {
                "README  TXT",
                FAKEFAT32_FILEATTR_ARCHIVE | FAKEFAT32_FILEATTR_READONLY,
                sizeof(readme_str) - 1,
                {ReadInfo, NULL, NULL, NULL},
        },
        {
                "",
        }
};
static vsf_err_t ReadInfo(struct fakefat32_file_t*file, uint32_t addr,
                                    uint8_t *buff, uint32_t page_size)
{
    uint32_t remain_size = sizeof(readme_str) - 1 - addr;
   
    memcpy(buff, &readme_str[addr], min(remain_size, page_size));
    return VSFERR_NONE;
}

MSC_MEM是盘符,README  TXT是只读文件,映射到一个字符串:
// readme file
static const char readme_str[] =
"\
================================================================================\n\
VSF MemReader 0.1beta                   COPYRIGHT by SimonQian                  \n\
www.versaloon.com                                                               \n\
================================================================================\n\
\n\
Simply read/write the target memory through an file.\n\
";
MEMORY.BIN就是可以读写的存储器,当然,代码设置为只读,只实现了Read功能。


USB MSC bootloader, main.c:
main.zip (3.12 KB)
评分
参与人数 1威望 +1 收起 理由
smartmcu + 1 一坨屎狂吠开源不好,lz就几乎中计,谬已.
沙发
john_light| | 2012-12-29 09:09 | 只看该作者
顶后再看

使用特权

评论回复
板凳
phones| | 2013-1-2 13:18 | 只看该作者
纯秀的。

使用特权

评论回复
地板
yuangaoping| | 2013-1-4 15:41 | 只看该作者
支持

使用特权

评论回复
5
Simon21ic|  楼主 | 2013-1-4 17:22 | 只看该作者
phones 发表于 2013-1-2 13:18
纯秀的。

正解,纯秀,木有一丝杂质

使用特权

评论回复
6
小聪头| | 2013-1-4 20:29 | 只看该作者
看不懂

使用特权

评论回复
7
ppenppen| | 2013-1-4 21:38 | 只看该作者
这个是不是可以用来做脱机试验,或外接U盘系统升级。

使用特权

评论回复
8
Simon21ic|  楼主 | 2013-1-4 21:40 | 只看该作者
无聊发的东西,既然有人感兴趣,就开源个main.c,USB bootloader,无驱无上位机,同时支持MD,HD,XD,其他的没测试。

使用特权

评论回复
9
lxyppc| | 2013-1-5 09:24 | 只看该作者
楼主这个MSC的编译出来后有多大
新塘官方有个例程,也是用MSC升级,编译出来后小于4K
个人感觉再优化一下,可以把AES解密也塞在4K里面

使用特权

评论回复
10
Simon21ic|  楼主 | 2013-1-5 10:01 | 只看该作者
本帖最后由 Simon21ic 于 2013-1-5 10:04 编辑

NUC123的USB代码就是我在新塘的时候做的,他们的要求就是最大空间优化。不过在我看来,已经不算是library,只能算个demo了。
呵呵,我打赌4K不够,记得aes要超过1.5K,将近2K
我的USB是通用library,空间占用肯定比新塘的要大不少,既然你看了代码了,提示一下,你能看出是用什么芯片吗?我的usb协议栈可以用于多种处理器,高层代码不需要修改

使用特权

评论回复
11
lxyppc| | 2013-1-5 10:16 | 只看该作者
Simon21ic 发表于 2013-1-5 10:01
NUC123的USB代码就是我在新塘的时候做的,他们的要求就是最大空间优化。不过在我看来,已经不算是library, ...

原来如此,看到高人了
那个USB部分确实优化得很精练,但是只能针对当前应用,没有通用和扩展性可言了
我以前有个想法,也是关于USB库的
一般USB库为了适应多种协议,变得很冗余
而在大多数的设备上,这些协议其实是在编译时就决定了的
能不能用C++的模板技术来写USB库,让它在编译时就定下来
这样在保证灵活的同时也能尽量地优化代码

使用特权

评论回复
12
Simon21ic|  楼主 | 2013-1-5 10:35 | 只看该作者
本帖最后由 Simon21ic 于 2013-1-5 10:45 编辑

和客户开发习惯有关,即使写好了,没什么人用的话,还不如不写
不过,通用性对于开发时候很有用,而优化又是量产时候必须考虑的,以后做一些尝试后,我也会给出我的解决方案,目前还是以通用性为主,逼近现在这类项目要求巨快搞定的,甚至可以1小时内搞定,包括调试

使用特权

评论回复
13
backupyan| | 2013-5-16 13:22 | 只看该作者
膜拜,高人,很刚兴趣!

使用特权

评论回复
14
hawksabre| | 2013-5-16 19:02 | 只看该作者
谢谢了   版主   共享的资料不错   谢谢  收藏了   先   有时间消化消化

使用特权

评论回复
15
lxyppc| | 2013-5-20 09:07 | 只看该作者
Simon21ic 发表于 2013-1-5 10:35
和客户开发习惯有关,即使写好了,没什么人用的话,还不如不写
不过,通用性对于开发时候很有用,而优化又 ...

呵呵,楼主,我在11楼说的被Lee老师实现了
这里是帖子的连接
https://bbs.21ic.com/icview-551716-1-1.html

使用特权

评论回复
16
Simon21ic|  楼主 | 2013-5-20 11:00 | 只看该作者
看了一下,个人觉得不是一个等级的东西。我的是模拟一个FAT32的文件系统,包括模拟目录和文件。最简单的测试,在android下试试看能不能用

使用特权

评论回复
17
outstanding| | 2013-5-20 17:23 | 只看该作者
先顶。。。。

使用特权

评论回复
18
cjhk| | 2013-5-20 20:16 | 只看该作者
顶一个  好资料  还是版主给力啊  真的很不错   谢谢了   有时间需要好好消化一下   谢谢楼主

使用特权

评论回复
19
jstele| | 2013-6-14 07:42 | 只看该作者
正在學習使用心唐的bulk方式做傳輸   給了很好的啟發點   還請版主對bulk的傳輸賜教

使用特权

评论回复
20
STARM| | 2013-6-14 08:25 | 只看该作者

纯秀的。:lol

使用特权

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

本版积分规则

个人签名:www.versaloon.com --- under construction

266

主题

2597

帖子

104

粉丝