设定帧定界符的命令是ifd. 接收数据时通过此命令,利用设定的分隔符区分数据帧。 此时通过"get rxlen"命令确认数据帧长度,来按数据帧单位接收数据。
区分数据帧的结束部分
为了区分数据帧的结束部分,按如下生成分隔符。
"set ifd (del)"
在del上设定帧定界符至相应分隔符为一个数据帧。 分隔符需要按16进制数的字符串形态设定,可以最少从2字节到最大64字节设定。
为了区分数据帧的开始和结束,需要如下生成2个分隔符。
"set ifd (start_del) (end_del)"
将帧定界符设定2个,自第一个分隔符至第二个分隔符将为一个数据帧。 此时,两个分隔符与其分隔符时间的数据有效,其他数据将被无视。 帧定界符2个的长度合不能设定超过64字节。
在帧定界符设定状态,将此解除的方法如下。
"set ifd"
如在ifd命令后面什么都不输入,帧定界符区分设定将解除。
<?php
include "lib/sd_spc.php";
$sid = 14;
spc_reset();
spc_sync_baud(115200);
spc_request_dev($sid, "set uart 115200");
spc_request_dev($sid, "set ifd 1b01");
echo spc_request_dev($sid, "get ifd"), "\r\n"; // output: 1b01
spc_request_dev($sid, "set ifd 1b02 1b03");
echo spc_request_dev($sid, "get ifd"), "\r\n"; // output: 1b02 1b03
spc_request_dev($sid, "set ifd");
echo spc_request_dev($sid, "get ifd"), "\r\n"; // output:
?>
利用帧定界符的数据发送/接收 例
此例子是将 0x0d作为分隔符,按数据帧单位接收数据并将相应数据重新发送的例子。
<?php
include "/lib/sd_spc.php";
$rwbuf = "";
$sid = 14;
spc_reset();
spc_sync_baud(115200);
spc_request_dev($sid, "set uart 115200N81");
spc_request_dev($sid, "set ifd 0d");
while(1)
{
$txfree = (int)spc_request_dev($sid, "get txfree");
$rlen = (int)spc_request_dev($sid, "get rxlen");
if($rlen > 0)
{
if($rlen <= $txfree)
{
// receive data
$rwbuf = spc_request($sid, 6, "$rlen");
// send data
spc_request($sid, 7, $rwbuf);
// print data
echo $rwbuf;
}
}
usleep(1000);
}
?>
※ 注意:帧定界符设定("set ifd") 和帧间隙设定 ("set ifg") 无法同时使用。