SIF协议 一线通

使用范围:
在MCU外围硬件接口不够,甚至一些单片机没有USART、IIC、SPI等接口的时刻,有需要和其他设备或者器件进行简单的通讯,可以尝试使用SIF协议。
接线方式:
主从方式采用单相单线传输,即只需要一根传输线路,一方为发送方,一方为接收方。
波特率
主机和从机制定协议之前讨论,或者主机随意,从机根据主机的发送解析,从机可以做到波特率自适 应
数据规范:
电平: TTL
在这里插入图片描述
DATA(0)表示此bit位为0,DATA(1)表示此bit位为1,一个字节由8个bit位组成。一个数据包包含一个同步头。
示例 :
一个字节8**1.5=12ms,一个包10个字节的话,就是12*10+51(同步头)=171ms。
传输速度相对比较慢,但是也能应付实时性要求不高的场合,以前降低芯片的硬件成本。

上传下解析一线通协议,有空再整理下发送

#define Counter_Start_Bit 40
#define OneByteBitNum 8

static LevelStatus_TypeDef levelstatus_temp = Low_Level ;
static LevelStatus_TypeDef levelstatus = Low_Level
static uint16_t timer_highlevel = 0 ;
static uint16_t timer_lowlevel = 0 ;
static uint16_t timer_levelstatus = 0 ;
static uint8_t counter_displacement = 0 ;
static uint8_t DataBuff[20] =0;

void ReadLogicLevel(void)//1Khz
{
/获取gpio电平/
levelstatus_temp = GetPinLevel(Pin) ;
if(levelstatus != levelstatus_temp)
{
/更新电平状态/
UpdataLevelStatus();
if(levelstatus == Low_Level)
{
/低电平时间长度大于同步头低电平时间/
if(timer_lowlevel_OLC >= Counter_Start_Bit)
DetectStartBit();//同步头
else
GetLogicValue();//数据
}
}
else
{
timer_levelstatus ++ ;
}
}

void DetectStartBit(void)
{
data8bit_temp_OLC = 0;
counter_displacement = 0;
}

void UpdataLevelStatus(void)
{
if(Low_Level == levelstatus_OLC)
timer_lowlevel = timer_levelstatus ;
else
timer_highlevel = timer_levelstatus ;
timer_levelstatus = 0 ;
/更新电平状态/
levelstatus = levelstatus_temp ;
}

void GetLogicValue(void)
{
data8bit_temp_OLC <<= 1 ;
if(timer_highlevel_OLC > timer_lowlevel_OLC )
{
if((timer_highlevel_OLC- timer_lowlevel_OLC) > 5)
data8bit_temp_OLC ++ ; //认为次BIT为1
else
Flag_code_receive_wrong = YES ; //电平有异常
}
else
{
if((timer_lowlevel_OLC- timer_highlevel_OLC) > 5)
;
else
Flag_code_receive_wrong = YES ;
}
counter_displacement ++ ;
if(0 == counter_displacement % OneByteBitNum)
Write8bitToCodeTemp();
}

void Write8bitToCodeTemp(void)
{
DataBuff[(counter_displacement / OneByteBitNum) - 1] = data8bit_temp_OLC ;

/....
业务层代码
....../

}

  • 4
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值