最近发现Homebus,将电源和通信数据经过MAX22088处理后叠加在一起了,所有设备都通过电源进行通信,省去了额外的通讯线。
软件要处理的就是在每个byte里插入aa,如下
int16 HbusSendData(uint8 *destin, uint8 * src, int16 src_len )
{
uint8 i = 0;
for (i = 0; i < src_len; i++)
{
//发送低位
destin[(i*2) + 0] = (( src[i] & 0x08) << 3 ) +
(( src[i] & 0x04) << 2 ) +
(( src[i] & 0x02) << 1 ) +
(( src[i] & 0x01)) + 0xaa;
//发送高位
destin[(i*2) + 1] = (( src[i] & 0x80) >> 1 ) +
(( src[i] & 0x40) >> 2 ) +
(( src[i] & 0x20) >> 3 ) +
(( src[i] & 0x10) >> 4 ) + 0xaa;
}
return src_len*2;
}
int16 HbusRecData(uint8 *destin, uint8 * src, int src_len )
{
uint8 i = 0;
src_len = src_len/2;
for (i = 0; i < src_len; i++)
{
//接收低位低位
destin[i] = 0xf&(((( src[(i*2) + 0] & 0x40) >> 3 ) +\
(( src[(i*2) + 0] & 0x10) >> 2 ) +\
(( src[(i*2) + 0] & 0x04) >> 1 ) +\
(( src[(i*2) + 0] & 0x1))));
//接收高位低位
destin[i] |= 0xf0&((( src[(i*2) + 1] & 0x40) << 1 ) +\
(( src[(i*2) + 1] & 0x10) << 2 ) +\
(( src[(i*2) + 1] & 0x04) << 3 ) +\
(( src[(i*2) + 1] & 0x1) << 4 ));
}
return src_len;
}