Thread 中讨论的其他器件: Z-stack、TIMAC、 SMARTRF06EBK
我想咨询 TI 工程师、而不是论坛。
我如何向他们提出要求?
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
我想咨询 TI 工程师、而不是论坛。
我如何向他们提出要求?
我通过查看 CC2530示例实现了该功能。
1) 1)使用终端器件 CC2530 (hal_adc.c)读取电压。
2) 2)将读取的值发送到路由器 CC2530。 (Basicrf.c)
都能正常工作。 但是、将上述两种方法混用是行不通的。 无错误发生。
1) 1)是否有任何仅涉及 ADC 和射频通信的示例?
ZStack 示例包含太多不必要的文件、并且交织在一起、因此如果我删除不必要的内容、它将无法正常工作。
2) 2)我可以使用 basic_rf.c 作为终端设备和路由器运行吗? 有人说 basic_rf.c 仅用于1:1通信。
没有用于射频通信的单个文件。 您可以查看 Z-Stack 3.0.2\Documents\Z-Stack 3.0 Developer's Guide.pdf 以进一步了解 ZCL、APS、BDB、NWK 和 MAC 层。 通常、ZCL 命令将导致 AF_DataRequest、其最终调用 APSDE_DataReq 。 预先构建的 Zigbee 库中包含此函数、用户无法访问、但它将生成必要的无线电命令来控制 IEEE MAC/PHY。
此致、
Ryan
我不明白 TI 的支持系统是怎么样的
我只是想要几页的文档,但所有的答案都是'读一本书'。
我使用 CC2530F256板。 面积为2厘米*2厘米。 大约需要10美元。
我只使用了两个函数:ADC 和 RF。 我认为这是一个非常简单和小巧的功能。
将值放入一些设置寄存器、并将值放入数据传输寄存器。 非常简单。
但是、ZStack 3.0适用于具有 CC2538EM 的 SmartRF06EB 电路板。 不是 CC2530F256板。 它具有很多功能。
我是否需要阅读94页 SmartRF06EB 板文档以获取 ADC 和射频源?
那么这将构成一个网络、因此基本射频可能不适用。 在 有可能引起进一步混淆的情况下、SimpliciTI 或 TIMAC 星形网络也是可能的。
请注意、CC2530是一款具有较旧软件资源的旧器件。 为获得升级的用户体验、我推荐使用 SimpleLink CC13XX/CC26XX F2 SDK的 CC26XX 器件。
此致、
Ryan
我在 Timac 中找到了循环的来源。 osal.c.中的 OSAL_RUN_SYSTEM()
我可以在那里添加源吗?
我的来源如下。
P1DIR |= 0x03;
P1_0 = 0;
P1_1 = 1;
halSleepWait(500);
P1_0 = 1;
P1_1 = 0;
halSleepWait(500);
uint16 adcvalue=0;
adcvalue=HalAdcRead (HAL_ADC_channel_0、HAL_ADC_Resolution_10);
MSA_Data=adcvalue//必须转换以适应格式
MSA_McpsDataReq (MSA_Data、MSA_ECHO_LENGTH、TRUE、MSA_CoordShortAddr);
如果我错了、如何调用 MSA_ProcessEvent ()来传输 ADC 数据?
射频通信不是一个特殊情况的示例。 这是一种很常见的情况。
为什么不提供 MSA_ProcessEvent ()中射频通信的示例代码?
我已经阅读了 Timac 上的所有文档,但我找不到像你的答案这样的方法,所以我不知道还有什么可以做的。
我并不是要求您编写我的代码。
请提供一个在 TIMAC 上正确运行的典型、通用、标准 RF 的源代码示例。然后我就能了解 Timac 过程了。
尊敬的 Edan:
我已从您之前的 E2E 回复中删除了一些评论、根据 E2E 发布指南、这些评论既不友好、也不专业。 请不要在以后再作进一步的发言。
很抱歉您很难掌握所提供的示例代码。 MSA 示例的完整文档(包括开箱即用用法和 用于 进一步应用扩展的 MSA_ProcessEvent 和 MSA_McpsDataReq 例程说明)在 TIMAC 1.5.2.432999\Documents\Mac 示例应用-软件 Design.pdf 中提供
在 MSA_ProcessEvent 中已经存在直接使用 MSA_McpsDataReq 的实例、例如用于数据包接收回波的 MAC_MCPS_DATA_IND 情况。 我之前的消息的目的是共用一个方法来创建一个定期定时器、此定时器将定期执行您感兴趣的代码。 TI 提供了基线示例代码、开发人员可以在其中进一步实现自己的功能、E2E 是一种让经验丰富的工程师与社区互动、回答问题并帮助指导 开发过程的方式。
此致、
Ryan
好的、对不起、我不知道发布指南。 我会阅读并遵循。
我已经阅读了所有文档。 当然,我也阅读了 Mac 示例应用程序- Software Design.pdf。
Mac 示例应用程序- Software Design.pdf 是对函数的描述、而不是将函数组合使用的示例
我需要介绍一下基本功能 组合的示例。
总结到目前为止的答案、似乎射频通信需要创建一个执行 MSA_SEND_EVENT 的计时器。
我需要的是包含这些内容的单页 main.c 文件。
在部分示例中包含大量不必要的源代码、但我找不到任何使用每个基本功能(ADC、RF、DIO 等)的示例。
1)我正在尝试开发只有 CC2530 + aNNTENA 的电路板、而不使用 SMARTRF06EBK 等评估板。
TIMAC 示例的 MSA_CC2530工程是否可以使 CC2530之间的射频通信不是评估板?
2)我把下面一行放在 osalInitTasks()的最后一行
OSAL_start_timerEx (taskID、msa_send_event、msa_wait_period);
这和您说的是一样吗?
我在 MSA_ProcessEvent ()中的"if (events & MSA_SEND_EVENT )"上设置了断点。
但断点设置被禁用、因此我无法检查我的编码是否正确。
感谢您的继续回复。
我对一般性的回答而不是直接的解决方案感到沮丧。
我很抱歉。
如果我在这项发展中取得成功,这将是因为你的帮助。
1)外设修改由 hal_board_cfg.h 和 TIMAC 1.5.2.43299\Components\hal\target\CC2530EB 中包含的其他 HAL 文件(例如 hal_led.c 和 hal_key.c)控制。 无线电配置由 TIMAC 1.5.2.43299\Components\mac\low_level\srf04\single_chip 中的 mac_radio_defs.c/mac_rffrontend.c 确定。 您将需要根据定制硬件的需求更改这些文件。
2) 此 API 应位于应用文件 msa.c 中、可能是在器件加入协调器 PAN 并准备好进行通信后发生的 MAC_MLME_ASSIGNED_CNF (适用于终端器件 RFD)。 在此上下文中可以使用 MSA_TaskId 而不是 taskID。 确保 IAR 调试器选项选择"TI XDS"而不是"Simulator"、并且确保在进入调试会话之前使用应用程序代码对器件进行编程。
此致、
Ryan
1)我将下面的行添加到 osalInitTasks()和 MSA_ProcessEvent()的最后一行。
OSAL_start_timerEx (MSA_TaskId、MSA_send_event、1000);
因此、循环运行正常、但时间间隔不是1000ms。
我尝试以各种方式更改时间数、但实际时间始终约为10ms。
2)我确认数据正在通过 MSA_ProcessEvent ()的 MSA_McpsDataReq ()传输。
但是、无法知道数据接收位置。
即使您提到了 MAC_MCPS_DATA_IND、MSA_McpsDataReq ()也将被发送、而不是被接收。
1) 1)您如何测量"实际"时间? 您的 IAR 版本是什么? 请注意、不应使用调试器来评估两个事件之间的时间、因为连接会极大地干扰时序。
2)正确、MAC_MCPS_DATA_IND 用于接收传入的应用数据包。 可以使用 MAC_MCPS_DATA_CNF 确认上次传输已完成、 而 pData->dataCnf.hdr.status == MAC_SUCCESS 意味着从远程设备接收到 MAC ACK (因为状态不是 MAC_NO_ACK 或任何其他故障状态)。 如果希望远程器件发出应用确认、请参阅 MAC_MSPS_DATA_IND 内的"IF (!MSA_IsCoordinator)"语句、终端器件可以在接收到应用数据包时将回显消息发送回协调器。 此回波数据包将在本地协调器侧 MAC_MSPS_DATA_IND 中接收。
此致、
Ryan
1) IAR EW8051 10.40.1
我将一个 LED 连接到了 CC2530板上。
在 MSA_PROCESSEVENT ()开始时 LED 亮起
MSA_PROCESSEVENT ()结束时 LED 熄灭
和计时器在 MSA_PROCESSEVENT ()结束时
因此、第一个 LED 亮起~下一个 LED 亮起是计时器的间隔。
2)下面是 MSA_PROCESSEVENT ()的 MAC_MCPS_DATA_IND
哪个变量具有接收到的数据?
案例 MAC_MCPS_DATA_IND:
pData =(macCbackEvent_t*) pMsg;
if (MSA_DataCheck (pData->dataInd.MSDU.p、pData->dataInd.MSDU.len))
{
//HalLedSet (HAL_LED_3、HAL_LED_MODE_TOGGLE);
/*只有在接收到的*/时才发回回声
if (!MSA_IsCoordinator)
{
如果(msa_echo_length >= 4)
{
/*返回接收到的数据包的前4个字节和最后一个字节*/
MSA_Data2[0]= pData->dataInd.MSDU.p[0];
MSA_Data2[1]= pData->dataInd.MSDU.p[1];
MSA_Data2[2]= pData->dataInd.MSDU.p[2];
MSA_Data2[3]= pData->dataInd.MSDU.p[3];
}
MSA_McpsDataReq (MSA_Data2、
msa_echo_length、
正确、
MSA_CoordShortAddr );
}
#if defined (NV_RESTORE)&& defined (FEATURE_MAC_SECURITY)
/*传入数据包*/
for (I = 0;I < MAX_DEVICE_TABLE_ENTRIES;I++)
{
if (msa_deviceTable[i].shortAddress == pData->dataInd.Mac.srcAddr.addr.shortAddr)
{
msa_deviceTable[i].frameCounter[0]++;
}
if (((msa_deviceTable[i].frameCounter[0]% 1000)=0)
{
OSAL_NV_WRITE (MAC_NV_DEVICE_TABLE、0、sizeof (MSA_deviceTable)、&MSA_deviceTable);
}
}
#endif
}
休息;
}
/*取消分配*/
mac_msg_deallocate ((uint8**)&pMsg);
1) 1)您不应 直接添加到 MSA_ProcessEvent、因为 此例程 会从各种事件源(SYS_EVENT_MSG、MSA_POLL_EVENT、MSA_SEND_EVENT)循环、因此会导致 LED 不断切换。 使用的示例是 MSA_POLL_EVENT、该事件会在 MAC_MLME_ASSIGNED_CNF 期间以及每次 为 MSA_POLL_EVENT 事件提供服务之后启动一次。
2) pData->dataInd.MSDU.p (这是一个指针)
E2E 论坛提示:插入->代码
此致、
Ryan
我按如下源发送了地址、但接收到的 数据重复发生变化。
msa_Data1[12]=HI_UINT16(pData->dataInd.mac.srcAddr.addr.shortAddr); msa_Data1[13]=LO_UINT16(pData->dataInd.mac.srcAddr.addr.shortAddr);
但是、以下 源接收到的值与 SmartRF 闪存程序的 IEEE ID 相同。
//00 12 4B 00 13 8C B0 0C msa_Data1[12]=msa_ExtAddr[7];//00 msa_Data1[13]=msa_ExtAddr[6];//12 msa_Data1[14]=msa_ExtAddr[5];//4B msa_Data1[15]=msa_ExtAddr[4];//00 msa_Data1[16]=msa_ExtAddr[3];//13 msa_Data1[17]=msa_ExtAddr[2];//8C msa_Data1[18]=msa_ExtAddr[1];//B0 msa_Data1[19]=msa_ExtAddr[0];//0C
我想使用 printf ()、因此将#include "DebugTrace.h"添加到 MSA.c 中
我在 MSA_ProcessEvent ()的开头写了 printf ("test\n")。
没有编译错误、但工具输出窗口中没有任何内容。
短地址可能是由协调器在调试期间分配的、因此是动态的、但对于本地终端设备而言、扩展地址是静态的。 无论您需要什么、都可以。
我不确定 printf 对 TIMAC 的支持、但 DebugTrace.h 位于 MT 文件夹内、该文件夹通过 UART 等串行连接获得支持。 需要对您的终端进行进一步调查。 我建议您考虑启用 hal_uart.c/h 并使用 HalUARTWrite。
此致、
Ryan
我想问一下 ADC 返回值。
uint16 adcvalue=0;
adcvalue=HalAdcRead (HAL_ADC_channel_4、HAL_ADC_Resolution_12);
对 P0.4 (ADC4)施加3.3V 电压。
我希望获得0xFFF (12位)、但返回值是 0x7FF。
hal_adc.c:从以下函数返回的所有变量都是 unit16。
uint16 HalAdcRead (uint8 channel, uint8 resolution) { uint16 reading = 0; #if (HAL_ADC == TRUE) uint8 i, resbits; uint8 adcChannel = 1; /* * If Analog input channel is AIN0..AIN7, make sure corresponing P0 I/O pin is enabled. The code * does NOT disable the pin at the end of this function. I think it is better to leave the pin * enabled because the results will be more accurate. Because of the inherent capacitance on the * pin, it takes time for the voltage on the pin to charge up to its steady-state level. If * HalAdcRead() has to turn on the pin for every conversion, the results may show a lower voltage * than actuality because the pin did not have time to fully charge. */ if (channel < 8) { for (i=0; i < channel; i++) { adcChannel <<= 1; } } /* Enable channel */ ADCCFG |= adcChannel; /* Convert resolution to decimation rate */ switch (resolution) { case HAL_ADC_RESOLUTION_8: resbits = HAL_ADC_DEC_064; break; case HAL_ADC_RESOLUTION_10: resbits = HAL_ADC_DEC_128; break; case HAL_ADC_RESOLUTION_12: resbits = HAL_ADC_DEC_256; break; case HAL_ADC_RESOLUTION_14: default: resbits = HAL_ADC_DEC_512; break; } /* writing to this register starts the extra conversion */ ADCCON3 = channel | resbits | adcRef; /* Wait for the conversion to be done */ while (!(ADCCON1 & HAL_ADC_EOC)); /* Disable channel after done conversion */ ADCCFG &= (adcChannel ^ 0xFF); /* Read the result */ reading = (uint16) (ADCL); reading |= (uint16) (ADCH << 8); /* Treat small negative as 0 */ if (reading < 0) reading = 0; switch (resolution) { case HAL_ADC_RESOLUTION_8: reading >>= 8; break; case HAL_ADC_RESOLUTION_10: reading >>= 6; break; case HAL_ADC_RESOLUTION_12: reading >>= 4; break; case HAL_ADC_RESOLUTION_14: default: reading >>= 2; break; } #else // unused arguments (void) channel; (void) resolution; #endif return reading; }
我没有根据 TIMAC 更改它、它是 HAL_ADC_REF_AVDD .
#define HAL_ADC_REF_AVDD 0x80 /* AVDD_SOC Pin Reference */ #define HAL_ADC_REF_VOLT HAL_ADC_REF_AVDD void HalAdcInit (void) { #if (HAL_ADC == TRUE) adcRef = HAL_ADC_REF_VOLT; #endif }
尊敬的 Edan:
此结果应确认您正在以12位分辨率的二进制补码形式读取 ADC。 从 CC253x/4x 用户指南的第12.2.5章:
数字转换结果以二进制补码形式表示。 对于单端配置、结果预计为正。 这是因为结果是输入信号与接地之间的差值、它始终具有正符号(Vconv = Vinp–Vinn、其中 Vinn = 0V)。 当输入信号等于所选电压基准 VREF 时、将达到最大值。 对于差分配置、会对两个引脚之间的差值进行转换、该差值可能会带负符号。 例如、当抽取率为512且仅使用数字转换结果寄存器的12个 MSB 时、当模拟输入(Vconv)等于 VREF 时、将达到2047的最大值、当模拟输入等于–VREF 时、将达到–2048的最小值。
此致、
Ryan
感谢您的答复。
根据您的答案、单端输入的值为0~4096、差分输入的值为-2048~2047。
以下是 CC253x/4x 用户指南:
单端输入 AIN0至 AIN7由通道编号0至7表示。
通道编号8到11表示由 AIN0–AIN1、AIN2–AIN3、AIN4–AIN5和 AIN6–AIN7组成的差分输入。
ADC 读数函数是 hal_adc.c 中的 uint16 HalAdcRead (uint8通道、uint8分辨率) 。
我使用了 HAL_ADC_CHn_AIN4或 HAL_ADC_CHANNEL_4作为通道 参数。
这些是 hal_adc.h 中的单端通道、而不是 差分通道。
差分通道为 HAL_ADC_CHn_A0A1、HAL_ADC_CHn_A1A2、等等。
因此、我使用了单端通道、其最大值应为4095 (0xFFF)。
如果你能让我知道我是什么误解,我会很感激。
我会认为 ADC 转换结果是二进制补码、与单端或差分端配置无关。 在单端的情况下、可能的负值直接归零。 这里还有一些其他的资源 https://e2e.ti.com/f/1/t/899145
此致、
Ryan
1) 1) 当接收到来自15.4网络中关联器件的传入无线 IEEE 数据包时、调用 MAC_MCPS_DATA_IND。
2) 2) MSA_HandleKeys 内部的 HAL_KEY_SW_1条件为协调器建立了必要的启动过程。 因此可以在密钥句柄的上下文之外使用此代码。
/* Start the device as a direct message device and beacon disabled*/ if (!msa_IsStarted) { /* Read IEEE Address from Info Page */ MAC_READ_CHIP_IEEE_ADDR(msa_ExtAddr); /* Decide if direct or indirect messaging is used */ msa_IsDirectMsg = MSA_DIRECT_MSG_ENABLED; if (msa_IsDirectMsg) { /* Start the device as an DIRECT messaging device */ if (msa_BeaconOrder != 15) MSA_ScanReq(MAC_SCAN_PASSIVE, MSA_MAC_BEACON_ORDER + 1); else MSA_ScanReq(MAC_SCAN_ACTIVE, 3); } else { /* Start the device as an INDIRECT messaging device and beacon disabled */ /* Beacon network doesn't work with polling */ if (!msa_IsStarted) { msa_IsDirectMsg = FALSE; MSA_ScanReq(MAC_SCAN_ACTIVE, 3); } } }
此致、
Ryan
感谢您的帮助、我的项目进展顺利。
我使用设计手册 DN112的源代码创建了 UART0中断 RX 模式。
通过以下来源接收数据。(字母字符串数据)
我可以通过 MSA_ProcessEvent ()中的 MSA_SEND_EVENT 每秒检查接收到的数据
if(uartRxBuffer[0]!=0x0){ isRequest=TRUE; send_uart(uartRxBuffer[1]);//send to UART0 send_uart(uartRxBuffer[2]); send_uart(uartRxBuffer[3]); send_uart(uartRxBuffer[4]); uartRxBuffer[0]=0x0; }
但是、即使发送 一次 UART0并等待超过10秒、
它在 Rx 缓冲区中经常丢失。 如果传输的数据少于5位、则尤其如此。
您能帮助解决这个问题吗?
#define SIZE_OF_UART_RX_BUFFER 10 unsigned short __xdata uartRxBuffer[SIZE_OF_UART_RX_BUFFER]; unsigned short __xdata uartRxIndex; _Pragma("vector=0x13") __near_func __interrupt void UART0_RX_ISR(void); _Pragma("vector=0x13") __near_func __interrupt void UART0_RX_ISR(void){ URX0IF = 0; //UART0 RX Interrupt clear uartRxBuffer[uartRxIndex++] = U0DBUF; if (uartRxIndex >= SIZE_OF_UART_RX_BUFFER) { uartRxIndex = 0; //IEN0 &= ~0x04;//uart0 interrupt disable } }
void initUART(void) //sets all configurations in UART { CLKCONCMD = CLKCONSTA & 0xB8; //clock control while(CLKCONSTA & 0x40); PERCFG&=~0x03;//Alernative 1 selected for UART0 and UART1 P0SEL |= 0x3C;//P0.2 and P0.3(UART0)/ P0.4 and P0.5 (UART1) U0UCR |= 0x00; //H/w flow control disabled U0CSR |= 0x80;//SPI:0,UART1 U0CSR |= 0x40;//polling:0,interrupt:1 IEN0 |= 0x84; //UART0 RX Interrupt EA=1; URX1IE=1 URX0IF = 0; //UART0 RX Interrupt clear U0GCR |= 0x08; U0BAUD = 0x3b; //Baud rate set to 9600 bps U1CSR |= 0x80; U1UCR |= 0x00; //H/w flow control disabled U1GCR |= 0x08; U1BAUD = 0x3b; //Baud rate set to 9600 bps }
和 hal_board_cfg.h
#if HAL_UART /*#ifndef HAL_UART_DMA #if HAL_DMA #if (defined ZAPP_P2) || (defined ZTOOL_P2) #define HAL_UART_DMA 2 #else #define HAL_UART_DMA 1 #endif #else #define HAL_UART_DMA 0 #endif #endif*/ #ifndef HAL_UART_ISR #if HAL_UART_DMA // Default preference for DMA over ISR. #define HAL_UART_ISR 0 #elif (defined ZAPP_P2) || (defined ZTOOL_P2) #define HAL_UART_ISR 2 #else #define HAL_UART_ISR 1 #endif #endif #if (HAL_UART_DMA && (HAL_UART_DMA == HAL_UART_ISR)) #error HAL_UART_DMA & HAL_UART_ISR must be different. #endif // Used to set P2 priority - USART0 over USART1 if both are defined. #if ((HAL_UART_DMA == 1) || (HAL_UART_ISR == 1)) #define HAL_UART_PRIPO 0x00 #else #define HAL_UART_PRIPO 0x40 #endif #else #define HAL_UART_DMA 0 #define HAL_UART_ISR 0 #endif /* USB is not used for CC2530 configuration */ #define HAL_UART_USB 0 #endif
但是、即使发送到 UART0 一次且等待时间超过10秒、
经常在 Rx 缓冲区中丢失该信息
您是 RFD 还是 FFD 节点类型? 由于 RFD 可能会进入功率模式2 (睡眠)、因此在该模式下禁用 UART 接收。
如果传输的数据少于5位、则尤其如此
您可以尝试向此器件发送更长的填充数据、使其达到您确信将收到的长度、或者如果您不计划接收任何可解释的数据、而只是希望收到有关何时执行操作的通知、则可以将 UART RX 引脚配置为 GPIO 输入(在睡眠模式下启用)。
此致、
Ryan
此论坛包含 CC2530的 ADC、UART、RF 技术、因此无需阅读其他论坛。
现在问题是 CC2530的 i2c。
我使用 RemoTI-CC253xDK-1.2.1中的 I2C 驱动程序
<hal_i2c.h> //P1.6 for SDA and P1.7 for SCL. #ifndef OCM_CLK_PORT #define OCM_CLK_PORT 1 #endif #ifndef OCM_DATA_PORT #define OCM_DATA_PORT 1 #endif #ifndef OCM_CLK_PIN #define OCM_CLK_PIN 7 #endif #ifndef OCM_DATA_PIN #define OCM_DATA_PIN 6 #endif <ms_main.c> int main(void){ HalI2CInit(); uint8 senddata=0xFF; int8 status=HalI2CSend(0xA0, &senddata, 1); uint8 readdata=0x99; // change after reading if(status==0){ status=HalI2CReceive(0xA0, &readdata, 1); if(status==0) send_uart(readdata); } }
hal_i2c.c 和 hal_i2c.h 中的其他编码未更改。
我将 P1.6用于 SDA、将 P1.7用于 SCL。 (具有上拉电阻)。
根据上面的源代码、返回状态值全为0、正常。
但 读取的数据始终为00。 我需要0xFF。
i2c 从器件是 EEPROM (AT24c64)板。
我使用 Arduino 测试了相同的 EEPROM 板。
EEPROM 板可以很好地进行读取和写入。
您是否有在 CC2530上使用 i2c 的经验?
我在 CC2530上使用 I2C 没有任何经验。 由于 CC2530上没有专用的 I2C 外设硬件、因此介绍的解决方案是位拆裂软件实现。 您应确认您的代码未在别处使用 P1.6和 P1.7、并 使用示波器或逻辑分析仪实际监控 SCL 和 SDA 线路、以确认它们是否按预期受到控制。 您还应该将这些读数与 Arduino 解决方案进行比较、以发现差异。 您应仔细检查硬件、确保正确连接各线并正确分配 EEPROM 地址。 为什么您希望在发送0xFF 后返回0xAB? 您是否应该使用 HALI2CMreceive 地址0xA1读取值?
此致、
Ryan
是的、您说得对。 谢谢你。
这是接线错误。 因此、RemoTI-CC253xDK-1.2.1的 I2C 驱动器均运行良好。 我已经附加了 I2C 文件。
尽管 CC2530没有 I2C 功能、但已证明 I2C 可以使用下面的文件。
对其进行了细微修改、以适应 EEPROM (AT24c64) 协议。
HalI2CInit(); uint8 senddata[3]={0xAB,0x78,0x01}; status=HalI2CSend(0xA0, senddata, 3); uint8 readdata[3]={0}; // Buffer to store read data status=HalI2CReceive(0xA0, readdata, 3);
1)如果在终端设备已打开时协调员打开、
终端设备无法从协调器接收射频数据。
但是、协调器通常从终端设备接收射频数据。
我看到协调器 使用数据包监听器将射频数据传输到终端设备。
此时、关闭并开启终端设备、然后终端设备接收射频数据。
如何通过软件重新启动终端设备?
2)相反,协调器首先开启。 然后终端设备通电。
在协调器发送射频数据0xff 时间后运行正常。
因此终端设备接收数据太晚。
对于下面的序列编号、测试结果始终相同。
First 0~ff:不起作用
下一个0:不起作用
下一个1:它从 这里运行良好
以上序列存在于 MSA_PROCESSOR_EVENT 中。
if (msa_IsCoordinator) { if (MSA_PACKET_LENGTH >= MSA_HEADER_LENGTH) { //Coordinator sending to devices. Use the associated list of device to send out msg msa_Data1[0] = MSA_PACKET_LENGTH; msa_Data1[1] = HI_UINT16(msa_DeviceRecord[index].devShortAddr); msa_Data1[2] = LO_UINT16(msa_DeviceRecord[index].devShortAddr); msa_Data1[3] = sequence; } MSA_McpsDataReq((uint8*)msa_Data1, MSA_PACKET_LENGTH, msa_DeviceRecord[index].isDirectMsg, msa_DeviceRecord[index].devShortAddr ); }