主题中讨论的其他器件:CC1352R、
您好! 我尝试使用 CC13x2_26x2 SDK v3.10.01.11的 spimaster 示例在 CC1352R 和 TCAN4550之间设置 SPI 连接。 为了测试连接、我想读取 TCAN4550 0x0000寄存 器、该寄存器包含器件 ID 信息(根据数据表第45页、0x54、0x43、0x41、0x4E)。
问题是-无论 CC1352R 传输到 TCAN4550的内容是什么、如果 TCAN 打开而不是处于睡眠状态、它总是读取0xc8或0x89值。 因此、有一些响应、但通信方式似乎不正确。 有人可以请求帮助设置 SPI 吗?
代码如下所示:
/* === spimaster.c ==== */ #include #include #include /* POSIX 头文件*/ #include #include #include /*驱动程序头文件*/ #include #include #include /*示例/板头文件*/ #include "Board.h" #define THREADSTACKSIZE (1024) #define SPI_MSG_LENGTH (4) #define MAX_LOOP (10) 静态 Display_Handle 显示; unsigned char masterRxBuffer[4]; unsigned char masterTxBuffer[4]; // *=== masterThread ====== *主器件 SPI 在向从器件发送消息的同时从 从器件接收*消息。 // void * masterThread (void * arg0) { SPI_Handle 主 Spi; SPI_Params Parspiams; SPI_Transaction 事务; 布尔 转让; CONST CHAR MASTER_MSG[SPI_MSG_LENGTH]={0x41、0x00、0x00、0x01}; /*将 SPI 作为主器件打开*/ spiParams.frameFormat = SPI_POL0_PHA1; spiParams.bitrate = 4000000; spiParams.mode = SPI_MASTER; SPI_Params_init (&spiParams); masterSpi = SPI_open (Board_SPI_master、&spiParams); if (masterSpi == NULL){ Display_printf (display、0、0、"初始化主器件 SPI\n"时出错); while (1); } 否则{ display_printf (display、0、0、"Master SPI initialized"); } strncpy ((char *) masterTxBuffer、master_MSG、SPI_MSG_LENGTH); memset ((void *) masterRxBuffer、0、SPI_MSG_LENGTH); transaction.count = SPI_MSG_length; transaction.txBuf =(void *) masterTxBuffer; transaction.rxBuf =(void *) masterRxBuffer; transferOK = SPI_transfer (masterSpi、事务); if (transferOK){ Display_printf (display、0、0、"主设备已接收:%x"、masterRxBuffer[0]); Display_printf (display、0、0、"主设备已接收:%x"、masterRxBuffer[1]); Display_printf (display、0、0、"主设备已接收:%x"、masterRxBuffer[2]); Display_printf (display、0、0、"主设备已接收:%x"、masterRxBuffer[3]); } 否则{ display_printf (display、0、0、"主 SPI 传输失败"); } SPI_CLOSE (masterSpi); display_printf (display、0、0、"\nDone"); 返回(NULL); } /* ==== mainThread ==== // void * mainThread (void * arg0) { pthread_t 线程0; pthread_attr_t attrs; struct sched_param primParam; 内部 REC; 内部 detachState; /*调用驱动程序初始化函数。 * display_init(); GPIO_init(); spi_init(); /*配置 LED 引脚*/ GPIO_setConfig (Board_GPIO_LED0、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW); GPIO_setConfig (Board_GPIO_LED1、GPIO_CFG_OUT_STD | GPIO_CFG_OUT_LOW); /*打开输出的显示屏*/ Display = Display_open (Display_Type_UART、NULL); if (display =NULL){ /*无法打开显示驱动程序*/ while (1); } /*打开用户 LED */ GPIO_WRITE (Board_GPIO_LED0、Board_GPIO_LED_ON); display_printf (display、0、0、"启动 SPI 主设备示例"); display_printf (display、0、0、"此示例要求外部电线为" "已连接至接头引脚。 有关详细信息、请参阅 Board.html。\n"); /*创建应用程序线程*/ pthread_attr_init (atttrs); detachState = pthread_create_detached; /*设置优先级和堆栈大小属性*/ retc = pthread_attr_setdetachstate (&attrs、detachState); 如果(retc!= 0){ /* pthread_attr_setdetachstate()失败*/ while (1); } retc |= pthread_attr_setstacksize (&attrs、THREADSTACKSIZE); 如果(retc!= 0){ /* pthread_attr_setstacksize()失败*/ while (1); } /*创建主线程*/ priParam.sched_priority = 1; pthread_attr_setschedparam (&attrs、&priParam); retc = pthread_create (&thread0、&attrs、masterThread、NULL); 如果(retc!= 0){ /* pthread_create()失败*/ while (1); } 返回(NULL); }
