SCI分为服务端和客户端,服务端运行在Mcu1_0上,通过中断接收其余核的sci消息,并在task中对收到的消息进行相应处理。其余核中运行客户端,其他核通过可向Mcu1_0请求PM和RM服务。
每个核都有自己对应的发送Thread、接收Thread,可以将其理解为messege ram,用来存放待发送及接收到的数据。
SCI服务端请求PM、RM:
Mcu1_0可直接调用相应服务接口完成PM及RM的请求,而不像其他核需要夸核的sci通讯。
SCI客户端向服务点请求流程:
1.调用Sciclient_serviceGetThreadIds获取tx、rx的Thread Id.
2.调用Sciclient_serviceGetPayloadSize获取tx、tx的PayloadSize。
3.通过gSciclient_writeInProgress变量,确认当前核是否正在进行sci操作,若是,则等待其完成。
4.调用Sciclient_verifyThread验证当前tx Thread的状态
5.调用Sciclient_readThreadCount获取当前rx Thread的counter,通过该counter可知有没有接收到respond消息。若counter变大,说明接收到了消息。
6.调用Sciclient_sendMessage向tx Thread写入数据,使能发送。
7.在满足条件:sci处于poll模式 && rx Thread状态ok && 请求的模式为安全模式时,通过while死等response消息。
8.判断接收到的消息是否为当前序列的消息,即与发送相匹配。
9.接收消息。