最容易理解是就是单帧(SF),很多只需要一帧就能完成就可以使用单帧传输了,像之前说的“请求”,”肯定响应“什么的就是单帧。
而后面的首帧(FF),连续帧(CF),流控帧(FC)。都与多帧传输有关。
当需要传输的数据量比较多时,一帧的数据无法完全包含所有的数据。
例如烧写固件时,就必须使用到多帧传输。
多帧传输的方式如上图,发送端先发送首帧(FF),接受端接收到后返回一个流控帧(FC)给发送端,之后全部都是连续帧(CF)了。
那么首帧(FF),连续帧(CF),流控帧(FC)。它们具体内容是些什么呢?因此我们要回到第一张图去:
对于首帧(FF)来说,它主要发送两个字节的数据,第一个字节的高四位自然为1了,低四位和第二个字节共同表示多帧传输的字节数。
那么我们可以得到一次性最多可以发送2的12次方-1个字节。那就是4095个字节了。
对于连续帧(CF),它有一个叫SN的代码区域,这SN表示的是包的连续号,从0到15后,又置零。其功能是说明帧的连续顺序。
需要注意的是,首帧虽然没有SN的区域,但是在首帧也占一个SN,因此首帧之后的连续帧需要从1开始计数。
对于流控帧(FC),它有三个区域:FS,BS,STmin。
FS表示的是流控状态参数。例如0表示的是继续发送,1表示的是等待,2表示溢出。
BS表示的是块的大小,即发送端一次性能够发送多少个连续帧。
要注意的是,BS表示的是在发送端没有接受到流控信号时,能够发生的帧的数目。
而当BS为0则表示,在数据传输的时,接收端不再发送流控帧了。发送端应当连续不断的发送数据。
STmin表示的是两个连续帧的时间间隔。
———————————————
多帧传输其实跟uds协议没有关系,属于网络层的机制,遵循15765-2。
建立连接后,client首先发送首帧,告诉服务器,要发送的数据数量,
然后服务器会返回一个流控制帧,告诉客户端,是否可以连续发送数据帧(连续帧),
如果可以连续那么可以连着发多少帧,以及每两帧之间的最小时间间隔,
然后client就按照这个规则发送,也就是发连续帧时,有最小时间间隔的约束,服务器不会每收到一帧数据就应答一次,这样提高传输效率。
思考:多帧传输,一定是cient发送首帧吗?不一定,这跟uds服务有关,通过bootloader刷写程序时,上位机为客户端,发送首帧。其他的呢,什么情况下,服务器发送首帧,欢迎讨论和补充。
ISO 15765-2(网络层服务)_第55号小白鸭的博客-CSDN博客_15765-2
(2)、协议控制信息N_PCI标识了相互交换的N_PDU类型;同时,它还可以用于通信网络层实体之间其它控制参数的交换。关于N_PDU的分类,可以分成以下四类:单帧( SF N_PDU)、首帧( FF N_PDU)、后续帧( CF N_PDU)及流控帧( FC N_PDU)。其类别区分就是通过N_PCI这一信息进行区分的,具体如下:
通过上述表格,可以知道:
第一个字节的高位是0的为单帧信息;
第一个字节的高位是1的为多帧中的首帧;
第一个字节的高位是2的为多帧中的后续帧;
第一个字节的高位是3的为流控帧;
(3)、数据场N_Data用来传输服务用户的数据,其大小取决于N_PDU类型及选定的地址格式。