大家好,我最近在用tms570ls0914这款芯片来配置从芯片,使从芯片实现电磁阀的开关控制,但是在配置中出现了一些问题,想请教一下大家。
1、配置好spi后spi通信是可以的,四个脚都有信号,但是so脚的信号第一位是1(意思就是在上一次spi传输中发生了错误)下面的图6.21.7是数据帧的格式。我现在不太清楚那里发生了错误。
2、再仔细阅读从芯片数据手册后,发现可能是crc校验码错误的问题,下面的图6.21.6是crc校验码的计算方式,我理解的这款芯片crc校验码的多项式是2F,(比如说前24位数据是B91FFF,那么crc校验码就是F6,)不知道我这种理解算不算正确
3、spi通信不能达到应有的硬件控制效果,连最基础的关闭看门狗都不能做到,想请教一下各位这种情况怎么处理
Susan Yang:
CRC模块可用于计算接收数据流上的CRC,前提是该数据的CRC已知或者使用与CRC模块使用的相同多项式计算并与数据一起发送。
根据数据大小的不同,因为CRC模块将子64位写入视为带有前导0的64位值。例如,如果字节写入发生在地址0xFE000063(CRCSIGREGL1寄存器),则寄存器CRCSIGREGH1和CRCSIGREGL1中的3个剩余字节将被视为0。
同样在下面的示例中,结果被读取为对长long变量的64位访问。然而,由于CRC寄存器的存储器布置,最低有效字存储在较低地址处,从而使大端格式失效。基本上两个寄存器都必须在代码中颠倒过来。
#define CRC_CTRL0*(volatile unsigned int *)0xFE000000 #define CRC_CTRL2*(volatile unsigned int *)0xFE000010 #define CRC_STATUS*(volatile unsigned int *)0xFE000028 #define CRC_SIGREGL1*(volatile unsigned int *)0xFE000060 #define CRC_SIGREGH1*(volatile unsigned int *)0xFE000064 #define CRC_SIGREG*(volatile unsigned long long *)0xFE000060 #define CRC_REGL1*(volatile unsigned int *)0xFE000068 #define CRC_REGH1*(volatile unsigned int *)0xFE00006Cconst char endzero_array[10] = {0x01, 0x55, 0xFF, 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x00};void main(void) { /* USER CODE BEGIN (3) */unsigned char count;unsigned long long result = 0;CRC_CTRL0 |= 0x00000001;// reset CRC moduleCRC_CTRL0 &= 0xFFFFFFFE;CRC_CTRL2 |= 0x00000003;// configure full CPU modefor(count = 0; count<10; count++){CRC_SIGREGL1 = endzero_array[count];}result = CRC_SIGREG; }
Susan Yang:
另外我这边暂时没有这个板子,所以无法测试。建议您去e2e.ti.com/…/312 咨询下国外的工程师