CEC 输出数据始终和输出长度不匹配 前言! b7 N8 C/ Q3 D- x- F7 { 客户反应使用我们的STM32F446 的CEC 库的时候,输出的数据和数据长度始终不匹配,跟电视通信不正常,如果输出的数据始终比长度多一个字节.客户试着按字节数减一去做输出,但是又不能输出一个字节的情况. 4 W k& m) u1 _/ K" v3 Q 1 b U8 }* F) x 调研: N& j- r! N2 g5 n& k$ j 首先,我们来看看CEC 发送数据的过程:% \. u& \/ J7 k+ Q 1,数据格式,包含一个起始位,header OPCODE 以及0 到14 个字节的OPERAND 数据.以及一个EOM 和ACK.' G2 `; k) J* A( N# m. n! o& b 3 d( ?& B: t, E( A9 |" D 2 发送过程: 从下面两个寄存器的描述来看,当我们发送最后一个字节之前,要将EOM 置位.而每一次发送数据的第四位时候,它会发出TXBR 的请求(请求发送下一个数据) ( U; z- W0 q* H: [* o 3 发送函数: 当客户在调用下面发送函数的时候,数据跟长度不匹配. HAL_CEC_Transmit_IT(&hcec,InitiatorAddress ,DestinationAddress, (uint8_t *)&Tab_Tx, TxSize); 例如 :发送2 个字节(TxSize=2) 0x44 和0x43,但是我在后面发觉多出来一个字节(如下图),而如果我们将TxSize 设为1,反而数据发送正确. 从上面的函数来看,并没有什么错误.它仅仅开始发送了HEADER 和开始发送.0 J. i4 |3 X" b+ w7 r; f . V* c, K! G2 N- ]: P# k3 F 4 中断处理函数:' \9 q) T. c& D9 G) P; O 从上面的函数来看当我们发送字节数大于0 的时候,他每次发送一个字节,而当等于0 的时候它置位EOM,并且再次放了一个字节进入TXDR,看到这里就明白了,错误出现在这里了,既然是发送字节为0 了,为什么还要放一个字节呢?这里应该是最后一个字节的时候,置位EOM 和发送一个字节数据,而当再次中断来这里SIZE 变为0 的时候什么都不做. 解决方法: 按照下面的方法修改中断处理函数,送给客户验证,能够正常发送数据并且跟电视通信正常 文档下载2 g. I$ M' w9 Z! ?5 e3 v C 更多实战经验/ p* b, X$ U6 U; |0 k6 F8 m |
是说是开发者自己编写错误么 |
为啥我通过CEC给TV发命令,TV没反应 |