TC275及arm socketCAN硬件系统验证--Apple的学习笔记

前一篇诊断系统Linux Server端架构验证--Apple的学习笔记已经验证了PC python和linux socket(以太网)通信。然后就是linux socketCAN和TC275 CAN通信。要把整个硬件通路先打通。因为TC275上是有传输器的,但是bb-black开发板上没有,所以我之前网购了一个1050小板带终端电阻的。昨晚到货,今天下午玩了下,现在底层硬件系统及驱动全部ready了。
之后只要玩通信系统设计及python界面和多线程设计了。

一,自己焊接了接插件,用杜邦线连接了下

二,TX脚波形测试

通过TC275向往发报文来验证硬件电路。TC275芯片TX脚-->TC275传输器(CANH和CANL)->1050小板(CANH和CANL)->1050小板丝印的RX。
此时由于bb-black没有上电,所以没有ACK拉低的波形。但是总体2us一个bit说明500kbps波形正确。


image.png

三,整体系统通信验证

一开始通信不成功,bb-black还会提示bus-error,于是devmem2先检查了下bb-black寄存器,功能引脚设置正确,然后检查can控制器是否normal模式。结果也设置正确,最后再检查bb-black的连线,发现rx和tx连接反了。最后通信成功。说明硬件电路搭建完成。


image.png

波形测试最后2个bit能看到ACK拉低。波形正确。


image.png

四,TC275 demo code修改

将TC275原can0仅发送,can1仅接收。改成删除can1,can0收到一帧8byte的0x123后,再通过can0发一帧0x555的8byte报文。通过TC275调试器打断点,确认进入了接收中断。验证通过。


image.png

五,socketCAN代码验证

硬件都搭建完成,需要验证socketCAN应用模块的API功能,实现自动发送一帧,然后等待接收后,再发送一帧。


image.png
/* socketcan应用code */
/* 1. 报文发送程序 */
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
int main()
{
    int s, nbytes;
    struct sockaddr_can addr;
    struct ifreq ifr;
    struct can_frame frame[2] = {{0}};
    s = socket(PF_CAN, SOCK_RAW, CAN_RAW);//创建套接字
    strcpy(ifr.ifr_name, "can0" );
    ioctl(s, SIOCGIFINDEX, &ifr); //指定 can0 设备
    addr.can_family = AF_CAN;
    addr.can_ifindex = ifr.ifr_ifindex;
    bind(s, (struct sockaddr *)&addr, sizeof(addr));//将套接字与 can0 绑定
    //过滤规则
    struct can_filter rfilter[1];
    rfilter[0].can_id = 0x555;
    rfilter[0].can_mask = CAN_SFF_MASK;
    setsockopt(s, SOL_CAN_RAW, CAN_RAW_FILTER, &rfilter, sizeof(rfilter));

    frame[0].can_id = 0x123;
    frame[0]. can_dlc = 8;
    frame[0].data[0] = 0x1;


    //循环发送报文
    while(1)
    {
        nbytes = write(s, &frame[0], sizeof(frame[0])); //发送 frame[0]
        if(nbytes != sizeof(frame[0]))
        {
            printf("Send Error frame[0]\n!");
            break; //发送错误,退出
        }      
        printf("sendok\n",frame[1].can_id);  //debug 信息
        nbytes = read(s, &frame[1], sizeof(struct can_frame)); 
        printf("readID:%x\n",frame[1].can_id);  //debug 信息
        sleep(1);
    }
    close(s);
    return 0;
}

你可能感兴趣的:(TC275及arm socketCAN硬件系统验证--Apple的学习笔记)