Part Number:TMS320F28034Other Parts Discussed in Thread: C2000WARE
请问,当作为主机时,请求从机数据的指令值什么或者设置是什么?
Yale Li:
您好,您使用的是什么通信模块?
,
? ?:
TMS320F28034 + LIN收发器
,
? ?:
我现在通过设置LINID和LINTD0/LINTD1可以发送主机的报文数据,但是我如何请求从机报文呢?是要修改LINID?还是通过LINTD0/LINTD1发送一些请求指令?
,
Yale Li:
我向资深工程师询问后回复您
,
Yale Li:
请您看一下如下路径的C2000ware示例:C:\ti\c2000\C2000Ware_version\device_support\f2803x\examples\c28\lina_external_loopback
通常来说,您需要向头部写入正确的ID。所有的从节点都将会收到消息,但是只有和ID匹配的从节点才会响应。
,
? ?:
头部ID是在哪里写入,LINID还是其他地方
,
? ?:
例程中并没有给出相应的写入方法,麻烦告知一下
,
Yale Li:
是LINID。我们在上面提供给您的LIN例程中,演示了如何写入LINID寄存器,以及如何配置RXIDMASK/TXIDMASK:
//// LIN MASK Configuration 2//LinaRegs.LINMASK.bit.RXIDMASK = RXID_MASK; // 0xALinaRegs.LINMASK.bit.TXIDMASK = TXID_MASK; // 0xA//// Initialize the Slave LINIDNUM register//LinaRegs.LINID.bit.IDSLAVETASKBYTE = LINIDNUM_Slave;// 0x30//// Release SCI from software reset state - End of Config//LinaRegs.SCIGCR1.bit.SWnRST = 1;//// LIN Response Length//LinaRegs.SCIFORMAT.bit.LENGTH = RESP_LENGTH;for(i=0;i<8;i++){//// Transmit Data - This populates the LIN transmit// buffers - no data is actually sent yet.//LinaRegs.LINTD0.all = *Tx_DataPtr++;LinaRegs.LINTD1.all = *Tx_DataPtr++;//// Send ID by writing to LINIDNUM register// This causes the ID to be written to the bus.In turn,// this causes both TX and RX ID matches in the slave task// to occur - causing the data in the transmit buffers to// be placed on the bus and also read into the receive buffers//LinaRegs.LINID.bit.IDBYTE = LIN_ID;// 0x3A
,
? ?:
你好,我现在可以正确的发送我的报头,但是从机与之匹配的信息并没有发出来,除了要设置LINID(PID),还需要设置别的吗?
,
? ?:
我还有另一个疑问,请问2803x作为主机,发送报文时,假设0x01时主机的控制报文(假设没有数据,空),0x02时请求从机数据的报文,在发送报文头的时候,怎么去判断这个报文头是主机控制报文还是请求数据的报文呢,毕竟这个报文头的赋值方式都是将PID写入LINID中?
,
Yale Li:
您是如何设置 IDSLAVETASKBYTE的?这也是需要的,以便从设备知道 LIN 节点是否需要执行 RX 响应、TX 响应或不执行任何操作。
,
? ?:
谢谢,你的回答,我之前是设置时帧间隙太短了,从机还有响应就发下一帧了
,
Yale Li:
不客气,也很感谢您的分享