OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 5454|回复: 24

急,哪位神仙做过GPRS给STM32F103更新下载程序的?

[复制链接]

12

主题

144

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2017-8-1
在线时间
92 小时
发表于 2018-2-1 17:16:12 | 显示全部楼层 |阅读模式
最近公司要求用GPRS给F103片子更新固件,我调试了半个月依然没有成功,跪求有做过的大神说一下实现原理,或者参考例程。
多谢万能的坛友了!
青涩不及当初,聚散不由你我!
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

8

主题

102

帖子

1

精华

高级会员

Rank: 4

积分
991
金钱
991
注册时间
2014-11-19
在线时间
357 小时
发表于 2018-2-5 10:47:49 | 显示全部楼层
独立调通IAP和GPRS通讯,再整合一起。你问的太广泛,技术实现是没问题的,我只用过网口和WiFi,但原理都一样,有服务器就在现成的通信协议下加上文件下载的协议就行了。如果没有服务器也没有软件开发同事,而且只是单纯的实现功能,那可以用花生壳内网穿透,随便用一台电脑做TFTP服务器(百度Tftpd32,安装使用),然后用tftp协议就可以远程下载程序文件,这样的好处是不需要重新定义协议和开发服务器,但是有一个问题,就是TFTP协议不提供校验功能,我的做法就是下载两次同样的数据块,对比数据是否一样来减少传输过程造成的数据错误,IAP方面用Bootloader+APP1+APP2的方式,更新失败后还可以运行旧程序再次更新。
给你贴点TFTP协议的程序参考
[mw_shl_code=c,true]//操作码Opcode
#define TFTP_RRQ   01  //读请求
#define TFTP_WRQ   02  //写请求
#define TFTP_DATA  03  //数据包
#define TFTP_ACK   04  //确认包  
#define TFTP_ERROR 05  //错误代码

//模式
#define TFTP_NETASCII 0   
#define TFTP_OCTET    1

//端口号
#define TFTP_PORT 69

//数据大小,0~512
#define TFTP_DATALEN 512
//数据+操作码+块号
#define TFTP_NOTEND_DATALEN TFTP_DATALEN+2+2


/* 读/写请求包报文格式:         
*2 bytes     string    1 byte     string   1 byte      
*-------------------------------------------------        
*| Opcode |  Filename  |   0   |   Mode   |   0   |        
*-------------------------------------------------
*参数说明:
*opcode:操作码
*mode:模式,netascii或octet
*filename:文件名
*buffer:填充缓存
*/
int tftp_makereq(unsigned short opcode,int mode,char *filename,char *buffer)
{   
        int pos = 0;   //位置   
        int i = 0;   
        char str[32] = "";   

        if(mode==TFTP_NETASCII)   //传输模式   
                strcpy(str,"netascii");  
        else        strcpy(str,"octet");   
        buffer[pos] = opcode>>8;  //操作码Opcode = 01(RRQ) or 02(WRQ)        
        pos++;   
        buffer[pos] = opcode&0xff;
        pos++;   
        for(i=0;i<strlen(filename);i++) //文件名 &buffer[3] = Filename   
        {     
                buffer[pos] = filename;   
                pos++;   
        }   
        buffer[pos] = 0;  //结束字节 0   
        pos++;   
        for(i=0;i<strlen(str);i++) //模式 Mode  
        {     
                buffer[pos] = str;   
                pos++;
        }   
        buffer[pos] = 0;   //结束字节 0  
        pos++;   
        return pos;  // 返回请求包头长度
}


/* 数据包报文格式         
* 2 bytes     2 bytes     n bytes   
*----------------------------------         
*| Opcode |   Block #  |   Data   |      
*----------------------------------   
*参数说明:
*num:块编号
*data:数据
*datasize:数据大小
*buffer:填充缓存
*/
int tftp_makedata(int num,char *data,int datasize,char *buffer)
{
  int pos = 0; //位置   
       
  buffer[pos] = TFTP_DATA>>8; //操作码Opcode = 03
  pos++;
  buffer[pos] = TFTP_DATA&0xff;
  pos++;
  buffer[pos] = num>>8; //Block # 块号
  pos++;
  buffer[pos] = num&0xff;
  pos++;
  memcpy(&buffer[pos],data,datasize); // Data 数据
  pos = pos + datasize;
  
  return pos;//返回请求包头长度
}       


/* ACK 应答报文格式
*2 bytes     2 bytes        
*---------------------   
*| Opcode |   Block #  |  
*---------------------   
*参数说明:
*num:块编号
*buffer:填充缓存
*/
int tftp_makeack(unsigned short num,char *buffer)
{
  int pos = 0;//位置  
       
  buffer[pos] = TFTP_ACK>>8; //操作码Opcode = 04
  pos++;
  buffer[pos] = TFTP_ACK&0xff;
  pos++;
  buffer[pos] = num>>8; //Block # 块号
  pos++;
  buffer[pos] = num&0xff;
  pos++;
       
  return pos;//返回请求包头长度
}[/mw_shl_code]
专注一件事情并做到极致>>> https://shop275468129.taobao.com
回复 支持 2 反对 0

使用道具 举报

0

主题

4

帖子

0

精华

新手入门

积分
17
金钱
17
注册时间
2019-2-21
在线时间
7 小时
发表于 2019-11-27 16:33:15 | 显示全部楼层
话说你最后搞出来了吗....
回复 支持 1 反对 0

使用道具 举报

13

主题

116

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
372
金钱
372
注册时间
2018-1-22
在线时间
118 小时
发表于 2018-2-5 10:31:38 | 显示全部楼层
一个月足够了,好好准备一下简历
回复 支持 1 反对 0

使用道具 举报

12

主题

144

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2017-8-1
在线时间
92 小时
 楼主| 发表于 2018-2-1 17:17:30 | 显示全部楼层
我跟老板说这种下载方式根本不靠谱,老板就怼我说:“人家共享单车全是GPRS更新的程序,你咋就不行呢?”。我无言以对了,表示很绝望!
青涩不及当初,聚散不由你我!
回复 支持 反对

使用道具 举报

12

主题

144

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2017-8-1
在线时间
92 小时
 楼主| 发表于 2018-2-1 17:18:52 | 显示全部楼层
老板说,再给我1个月时间,搞不出来就要炒我鱿鱼
青涩不及当初,聚散不由你我!
回复 支持 反对

使用道具 举报

21

主题

2205

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
5136
金钱
5136
注册时间
2014-8-26
在线时间
1316 小时
发表于 2018-2-1 18:51:36 | 显示全部楼层
没做过    帮顶
回复 支持 反对

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
发表于 2018-2-1 19:01:03 | 显示全部楼层
要是因此被鱿鱼,要懂得去相关部门维权,提前做好证据。
回复 支持 反对

使用道具 举报

3

主题

111

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1085
金钱
1085
注册时间
2015-5-22
在线时间
607 小时
发表于 2018-2-1 19:37:55 | 显示全部楼层
百度搜索 STM32 GPRS IAP     就可以   
关键在于处理 丢包,数据错误 以及更新失败处理。
我做过这个,只不过是基于 wifi  的自己写个协议
回复 支持 反对

使用道具 举报

12

主题

144

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2017-8-1
在线时间
92 小时
 楼主| 发表于 2018-2-5 09:27:16 | 显示全部楼层
学习stm32f4 发表于 2018-2-1 19:01
要是因此被鱿鱼,要懂得去相关部门维权,提前做好证据。

做不出来东西,老板炒鱿鱼很正常啊,咋维权
青涩不及当初,聚散不由你我!
回复 支持 反对

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
发表于 2018-2-5 10:30:47 来自手机 | 显示全部楼层
劳动合同中不符合劳动法的内容即使签了也无效,录音笔、手机等录音取证。最后,在百度地图里找到劳动仲裁部门。
回复 支持 反对

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
发表于 2018-2-5 10:39:37 来自手机 | 显示全部楼层
别害怕,不怨你自己,先认真做事。但也不能被人随意欺负,世道险恶,害人之心不可有,防人之心不可无。
回复 支持 反对

使用道具 举报

102

主题

318

帖子

2

精华

金牌会员

Rank: 6Rank: 6

积分
1870
金钱
1870
注册时间
2011-12-21
在线时间
544 小时
发表于 2018-2-5 10:51:24 | 显示全部楼层
就是普通的IAP加个协议,保证数据准确,然后通过GPRS通讯传输啊
回复 支持 反对

使用道具 举报

12

主题

144

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2017-8-1
在线时间
92 小时
 楼主| 发表于 2018-2-5 11:22:27 | 显示全部楼层
麦田稻草 发表于 2018-2-5 10:47
独立调通IAP和GPRS通讯,再整合一起。你问的太广泛,技术实现是没问题的,我只用过网口和WiFi,但原理都一 ...

多谢大神啊,公司是想让做的是一个类似于远程抄表的一个功能,至于是不是用的服务器我就不懂了,老板说是按照共享单车的方案来,因为目前的共享单车就是采用的GPRS更新固件的!
大神能发下工程源码参考下吗
青涩不及当初,聚散不由你我!
回复 支持 反对

使用道具 举报

8

主题

102

帖子

1

精华

高级会员

Rank: 4

积分
991
金钱
991
注册时间
2014-11-19
在线时间
357 小时
发表于 2018-2-5 12:10:12 | 显示全部楼层
风清扬丶 发表于 2018-2-5 11:22
多谢大神啊,公司是想让做的是一个类似于远程抄表的一个功能,至于是不是用的服务器我就不懂了,老板说是 ...

那你们老板就是坑人啊,想要产品稳定,并且客户端数量多个,没有服务器是不可能的,服务器开发后台、前端、UI加起来至少都好几个人了,我公司都是有专门团队做这个事情,否则就外包(10万起步)。什么基础都没有,让你一个人来干,还一个月,不现实的,就算做出来后续增加客户端和维护会让你抓狂!你们老板只知道共享单车的功能,却不知道人家的的投入。源码涉及到公司的产品,所以不便公开,不过技术问题我能帮得上的会回答。
专注一件事情并做到极致>>> https://shop275468129.taobao.com
回复 支持 反对

使用道具 举报

94

主题

369

帖子

0

精华

高级会员

Rank: 4

积分
865
金钱
865
注册时间
2016-8-25
在线时间
485 小时
发表于 2018-2-6 22:57:10 来自手机 | 显示全部楼层
今天突然想起了万能的淘宝,在淘宝里搜一下吧,有惊喜
回复 支持 反对

使用道具 举报

22

主题

112

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
425
金钱
425
注册时间
2014-3-9
在线时间
102 小时
发表于 2018-2-7 09:26:25 | 显示全部楼层
风清扬丶 发表于 2018-2-1 17:17
我跟老板说这种下载方式根本不靠谱,老板就怼我说:“人家共享单车全是GPRS更新的程序,你咋就不行呢?”。 ...

跟老板说,你倒是给我组建一个共享单车的团队给我呀
魔法王子
回复 支持 反对

使用道具 举报

7

主题

199

帖子

0

精华

高级会员

Rank: 4

积分
711
金钱
711
注册时间
2017-5-20
在线时间
96 小时
发表于 2018-2-7 09:33:08 | 显示全部楼层
那还不简单。
首先调通GPRS,能用GPRS通信。这个网上一大堆例子。
第二,IAP。这个已经很普通了。能通信,那么做好检验,错误重发处理。假如内存足够,建议接收完再更新固件,否则程序回滚不好弄。
回复 支持 反对

使用道具 举报

11

主题

1041

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3696
金钱
3696
注册时间
2011-5-23
在线时间
2008 小时
发表于 2018-2-7 10:03:02 | 显示全部楼层
本帖最后由 aozima 于 2018-2-7 11:45 编辑

不应该先调研好方案么? 闷头瞎写,写出来有什么用呢?

设备规模多少?
服务器如何假设?
是否考虑现有的公有云?
gprs通讯是否打通?
http/ftp等下载功能是否打通?
固件的生成与校验?版本的管理 ?

整个系统运转起来,技术不是难点,但上面涉及的技术也不少。
所以,在实施之前,先做好评估,不然到了交期还没什么进展。
RT-Thread RTOS 音频,WIFI,蓝牙
回复 支持 反对

使用道具 举报

36

主题

75

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
金钱
421
注册时间
2015-12-16
在线时间
111 小时
发表于 2018-2-7 11:24:21 | 显示全部楼层
这个其实很简单  做个IAP  做两路SOCKT就行了  
人的一生总得有个目标!
回复 支持 反对

使用道具 举报

62

主题

902

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3555
金钱
3555
注册时间
2016-1-8
在线时间
543 小时
发表于 2018-2-7 11:45:51 | 显示全部楼层
说简单的 分享一下代码看看
回复 支持 反对

使用道具 举报

6

主题

315

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1665
金钱
1665
注册时间
2018-1-29
在线时间
159 小时
发表于 2018-2-7 12:34:44 | 显示全部楼层
GPRS连接后是不是算一个低速的internet节点?采用socket通讯吧?
回复 支持 反对

使用道具 举报

0

主题

2

帖子

0

精华

新手入门

积分
19
金钱
19
注册时间
2018-2-7
在线时间
3 小时
发表于 2018-2-7 13:24:43 | 显示全部楼层
通讯调通,IAP没问题,主要就是通讯协议机制,对固件数据进行打包处理,对接收数据进行校验查错,保证数据没有问题就好了。
回复 支持 反对

使用道具 举报

6

主题

315

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1665
金钱
1665
注册时间
2018-1-29
在线时间
159 小时
发表于 2018-2-8 07:34:42 | 显示全部楼层
这个项目里有低速文件传输的Ymodem协议(带CRC教研)的实现,也许能够帮到你!

stm32f0_programming_usart1.zip

1.58 MB, 下载次数: 115

回复 支持 反对

使用道具 举报

12

主题

144

帖子

0

精华

高级会员

Rank: 4

积分
545
金钱
545
注册时间
2017-8-1
在线时间
92 小时
 楼主| 发表于 2018-2-11 14:46:24 | 显示全部楼层
backup2k 发表于 2018-2-8 07:34
这个项目里有低速文件传输的Ymodem协议(带CRC教研)的实现,也许能够帮到你!

多谢多谢,这个程序里面有没有GPRS传输的部分啊
青涩不及当初,聚散不由你我!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-11-22 22:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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