最后排查是在计算校验和的for循环函数写法问题导致
原来是这样写for(i=0;i<4;i++)sum+=buf[i]; 修改后是这样for(i=0;i<4;i++)sum=sum+buf[i];
不清楚这两种写法有什么区别?但是就是这么改好了