SDI12协议:SDI-12 Serial Digital Interface 即串行数字接口,是一种基于微处理器的智能化传感器系统。 SDI-12通讯标准是由美国水文组织提出的的一种串行数据通讯接口协议,在SDI-12协会支持下,近年来欧美国家在环境监测中加以推广使用。 此技术广泛应用在工农业多参数测控、江河湖海的水文和气象等地球环境监测、养殖和食品生产中,可以远距离传送数据。
关键词:三根线、发送负逻辑。
注意点:如果用单总线协议,需要确认串口是否支持电平反转。
一、唤醒
1、拉高12ms
2、send_break,8.3ms
二、发送
如果你的单总线不支持时钟反极性,(即起始位和数据、停止位都要反着来那请用单总线来模拟吧),如果是RTOS没法精确定时,则需要电路上调整。
这里以截取0D! 命令下的回复为例子
2.1串口接收和回复
发送0D!,回复”0+1680“,其他命令可自行看手册 SDI-12_version-1_4-Jan-10-2019
发送的数据如下
发送的单字节代码如下(其他的按One-Wire协议自行调整):
起始位跟库函数的是相反的极性。
void SDI_ByteSend(uint8_t val)
{
uint8_t i= 0;
GPIO_SetBits(GPIOB, GPIO_PIN_10); //一个起始位
delay_us(delayTime);//0.83ms
for(i = 0; i < 8; i++) //八个数据位
{
if(val & 0x01)
GPIO_ResetBits(GPIOB, GPIO_PIN_10);//0.83ms
else
GPIO_SetBits(GPIOB, GPIO_PIN_10);
delay_us(delayTime);//0.83ms
val >>= 1;
}
GPIO_ResetBits(GPIOB, GPIO_PIN_10); //一个停止位
delay_us(delayTime);//0.83ms
}