SIF协议 一线通

SIF协议 一线通文章浏览阅读1.3w次,点赞3次,收藏47次。使用范围:在MCU外围硬件接口不够,甚至一些单片机没有USART、IIC、SPI等接口的时刻,有需要和其他设备或者器件进行简单的通讯,可以尝试使用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 ;

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

}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/37223.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注