Ymode传输数据的方式

Posted 瑞奇Ricky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ymode传输数据的方式相关的知识,希望对你有一定的参考价值。

最近笔者在进行资产监控设备研发,该设备主要是将设备与货物连接起来,通过设备的定位跟踪及震动报警等功能来对货物在某些情况下的状态,该设备一般运用于物流运输行业。
在这里插入图片描述
当货物通过物流进行运输时,设备会将一些参数通过数据传至后台,人们可以直接在后台就可了解到货物运输的位置,防止货物运输出错,如果在运输途中,遭遇强烈震动,后台会进行震动报警,可以减少运输途中因震动造成物品损坏的事件。
在这里插入图片描述
为了方便使用,该设备是支持远程在线升级的,说到远程升级,就不得不提一句OAT。
OTA(Over The Air)是一项基于短消息机制,是通过移动通信(GSM或CDMA)的空中接口对SIM卡数据及应用进行远程管理的技术。当我们的设备需要进行升级时,我们会通过向客户推送升级提醒,如果客户点击更新,则可以直接在远程进行升级,这种通过手机终端通过无线网络下载远程服务器上的升级包,对系统或应用进行升级的技术就叫OTA(Over-the-AirTechnology)升级。
在这里插入图片描述
OTA升级通过串口进行数据传输,把文件传送至单片机中,以下给大家介绍一种Ymode传输数据的方式。

/**

@bieaf YModem升级
@param none
@return none
/
void ymodem_fun(void)
{
int i;
if(Get_state()==TO_START)
{
send_command(CCC);
HAL_Delay(1000);
}
if(Rx_Flag) // Receive flag
{
Rx_Flag=0;// clean flag
/
拷贝 */
temp_len = Rx_Len;
for(i = 0; i < temp_len; i++)
{
temp_buf[i] = Rx_Buf[i];
}

switch(temp_buf[0])
{
case SOH:///<数据包开始
{
static unsigned char data_state = 0;
static unsigned int app2_size = 0;
if(Check_CRC(temp_buf, temp_len)==1)///< 通过CRC16校验
{
if((Get_state()==TO_START)&&(temp_buf[1] == 0x00)&&(temp_buf[2] == (unsigned char)(~temp_buf[1])))///< 开始
{
printf("> Receive start…\\r\\n");

Set_state(TO_RECEIVE_DATA);
data_state = 0x01;
send_command(ACK);
send_command(CCC);

/* 擦除App2 */
Erase_page(Application_2_Addr, 40);
}
else if((Get_state()==TO_RECEIVE_END)&&(temp_buf[1] == 0x00)&&(temp_buf[2] == (unsigned char)(~temp_buf[1])))///< 结束
{
printf("> Receive end…\\r\\n");

Set_Update_Down();
Set_state(TO_START);
send_command(ACK);
HAL_NVIC_SystemReset();
}
else if((Get_state()==TO_RECEIVE_DATA)&&(temp_buf[1] == data_state)&&(temp_buf[2] == (unsigned char)(~temp_buf[1])))///< 接收数据
{
printf("> Receive data bag:%d byte\\r\\n",data_state * 128);

/* 烧录程序 */
WriteFlash((Application_2_Addr + (data_state-1) * 128), (uint32_t *)(&temp_buf[3]), 32);
data_state++;

send_command(ACK);
}
}
else
{
printf("> Notpass crc\\r\\n");
}

}break;
case EOT://数据包开始
{
if(Get_state()==TO_RECEIVE_DATA)
{
printf("> Receive EOT1…\\r\\n");

Set_state(TO_RECEIVE_EOT2);
send_command(NACK);
}
else if(Get_state()==TO_RECEIVE_EOT2)
{
printf("> Receive EOT2…\\r\\n");

Set_state(TO_RECEIVE_END);
send_command(ACK);
send_command(CCC);
}
else
{
printf("> Receive EOT, But error…\\r\\n");
}
}break;
}
}
}

以上是关于Ymode传输数据的方式的主要内容,如果未能解决你的问题,请参考以下文章

YMODE协议简述

数据传输方式

刷题面筋-网络-数据传输方式

FTP的传输有两种方式?

数据传输方式

AJAX传输——以XML文件传输为例