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.

[参考译文] MSP430I2040:连接 I2C 上的 MSP430i2040S 分项计量 EVM

Guru**** 2044430 points
Other Parts Discussed in Thread: EVM430-I2040S, MSP430I2040
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/809952/msp430i2040-interfacing-the-msp430i2040s-sub-metering-evm-on-i2c

器件型号:MSP430I2040
主题中讨论的其他器件:EVM430-I2040S

大家好、在 EMDC 为 i2040分项计量 EVM 生成的参考代码中、也提供了 I2C 接口。 使用我已启用的宏、它在构建时没有错误。 请注意、我们是否在此 EVM 上测试了 I2C? 如果是、请分享测试时使用的 I2C 主机示例。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Abhed、您好!

    由 EMDC 生成的代码仅支持提供的 UART。 遗憾的是、我们没有开箱即用的支持 I2C 的代码。 但是、我们鼓励用户根据其特定应用修改此代码。 虽然通信类型和协议可能会发生变化、但您仍然可以利用 EMDC API、并且无需专注于如何开发/计算/测量计量参数。

    请记住、如果您将通信类型从 UART 更改为 I2C、则无法使用具有该代码库的 EMDC GUI。 但是、假设目标器件支持相同的协议、则可以通过 I2C 将其与主机器件搭配使用。

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 James:

          感谢您的回复。 感谢您澄清、I2C 接口尚未通过测试、并且在使用带有 i2040S EVM 的 EMDC 的开箱即用支持。 我打算仅在 I2C 接口上使用 EVM、并需要您的帮助。 请注意、您是否有任何已通过 i2040S EVM 验证的 I2C 主设备工作示例? 这将非常有帮助、因为这里的时间窗口有点短。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Abhed、您好!

    我建议参考我们的 I2C 代码示例(寄存器级或 DriverLib)作为起点。 您可以在下面的链接中找到几个不同的示例、包括 I2C 主器件。

    http://dev.ti.com/tirex/explore/node?devices=MSP430I2041&node=AH01QvoiHr7b925vcMFwtA__IOGqZri__LATEST

    这里的应用是什么?

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 James:

                   该应用使用 i2040作为 I2C 上连接的计量前端。 假设只要在参考代码中定义了宏、I2C 通信就可以开箱即用。 但是、正如您所说的那样、情况并非如此。

    要求您查看它的原因是为了节省精通代码的 gettign 的时间、然后找出错误(如果有)并修复代码。

    我已经测试了与 F5529 LP 运行 I2C 主设备的 I2C 接口、但没有看到 i2040S 响应 I2C 回调函数。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    我们已经在我们一侧进行了一些测试、似乎在几个步骤中启用了 I2C 通信。 请记住、我们尚未对其进行太多测试、它目前无法与 EMDC GUI 配合使用。 但是、您应该能够使用同一协议通过 I2C 主设备与目标 i20xx 器件进行通信。

    以下是我们为实现这一目标而采取的步骤。 首先、使用适用于 MSP430i20xx 器件的 EMDC 生成您的项目。 对该代码库进行了以下更改。

    1. 在'comm_config.h'中、将 COMM_SERIAL_interface 的定义更改为 COMM_I2CSLAVE、如下所示。
      //! \def 串行通信接口选择。 将其设置为有效
      //! 接口或 COMM_NONE、用于禁用 COMM 模块。
      //!
      #define COMM_SERIAL_INTERFACE (COMM_I2CSLAVE)
      
      //! \def 串行通信接口选择启用定义
      //! 这些模块会自动设置为包括相关模块。
      //!
      #if (COMM_SERIAL_INTERF=COMM_UART)
      #define UART__ENABLE (TRUE)
      #define I2CSLAVE__ENABLE (FALSE)
      #define TIMEOUT_ENABLE (FALSE)
      #Elif (COMM_SERIAL_INTERF=COMM_I2CSLAVE)
      #define UART_ENABLE (FALSE)#I2CSLAVE_
      
      (TRUE
      )#define TIME_ENABLE (TRUE)#define TIMEOUT (TRUE)#define TIMEOUT (TRUE) 
    2. 在"timeout.c"中、注释掉以下代码行、因为 i20xx 器件不具有该寄存器。
      void Timer_startDelayedFunctionTimer (const tFunctionTimer * pFunctionTimer)
      {
      Timer_stopDelayedFunctionTimer ();
      g_pFunctionTimer = pFunctionTimer;FunREG16
      (FUNCHTITITIME__Peripheral + OFS_TAxCCTL0)+~
      ~(TUNCH_TIMC_TIMC_TIMC_TRUNTIMER)
      
      
      + TRUNTIME_TIMCTRUNTIME_TIMC_TRUNTIMER + TRUNTIMER (TIMC_TIONF_TRUNCH_TRUNTIMER + TRUNTIME_TRUNTIMER)+ TRUNCH_TRUNCH_TRUNTIMER + TRUNCH_TRUNCH_TRUNCH_TRUNTIMER + TRUNCH_TRUNTIMER (TIMCTRUNCH_TRUNCH_TRUNCH_TRUNCH_TRUNCH_TRUNCH_TRUNCH_TRUNCH_TRUNCH_TRUNCH_TRUNTIMER)+ TRUNTIMER + TRUNCH_TRUNTIMER (
      
    3. 在'hal_system.c'中、将通信引脚从 UART 引脚 P1.2和 P1.3更新为 I2C UCB0引脚 P1.6 (SCL)和 P1.7 (SDA)。
      ////
      本地函数声明
      ////*************
      
      //
      //! 初始化 GPIO
      //!
      //! 返回无
      //
      ////
      静态空 hal_system_gpioInit (void)
      {
      /* P1.6:I2C UCB.S.& P1.7:I2C UCB0SDA *
      GPIO_setPeripheralModuleFunctionInputPin (GPIO_PORT_P1、
      GPIO_PIN6 | GPIO_PIN7、
      GPIO_PRIMARY_MODULE_FUNCTION);
      } 
    4. 在"i2cslave_defs.h"中、您可以保留或更改默认的 I2C 从地址0x0A。
      //
      //
      //! \def I2CSLAVE__EUSCI_B_PERIPHERATE 定义
      了//! eUSCI_B 实例正与该 I2C 从端口一起使用。
      //
      //! \def I2CSLAVE__ADDRESS 定义了与此
      //! 器件。
      ////
      *****************
      #define I2CSLAVE__EUSCI_B_PERIPHERATE(EUSCI_B0_BASE)
      #define I2CSLAVE__ADDRESS(0x0A) 
    5. 保存项目、重建代码、并对 MSP430i20xx 器件进行编程。

    现在、假设您的主机 I2C 器件使用正确的从器件地址和相同的协议、则通信应该起作用。 在我们的测试中、我们使用了 EVM430-i2040S 并连接到 J9接头上裸露的 I2C 引脚 P1.6和 P1.7。 查看 EVM430-i2040S 原理图、对 P1.7 (UCB0SDA)使用 J9.1、对 GND 使用 J9.2、对 P1.6 (UCB.S)使用 J9.3。

    我们通过此 EMDC 命令数据包(十六进制格式)发送、通知目标 i20xx 开始定期发送数据。 如果您对该协议有疑问、可以参考 EMDC 技术指南中的协议部分。 设备发送回了指示通信正常的内容。

    55AA060401010700

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 Abhed:

    除了 James 提到的 I2C 从设备更改之外、下面是使用 F5529 LP 的 I2C 主设备的示例:

    e2e.ti.com/.../MSP430F55xx_5F00_usci_5F00_i2c_5F00_master_5F00_EMDC.c

    我们将 Launchpad 中的 P3.0和 P3.1用于之前 James 在 i2040 EVM 上提到的 I2C 引脚。

    示例发送了一条命令以将 i2040设置为活动模式:

    然后它定期轮询从器件:

    希望对您有所帮助。

    此致、

    Luis Reynoso

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 James:Abhed、

                   我尝试了与上述步骤类似的操作、将 Arduino 保留为主控方、将 MSP430i 保留为从方以执行 i2c 读取、我将这两个命令帧从 Arduino 发送到从方地址0x0A 上的 MSP:  

    字节 COMMAND_FRAME[]={0x68、0x99、0x99、0x99、0x99、 0x99、0x99、0x68、0x23、0x03、 0x52、0x00、0x00、0xDE、0x16};
    字节 COMMAND_FRAME[]={0x55、0xAA、0x06、0x04、0x01、 0x01、0x01、0x07、0x00};

    但是、在此过程中、我没有收到 MSP 的任何响应、请分享您通过 i2c 发送的命令数据包、您已成功从从从器件获取读取响应、如果需要、我也可以在此处共享 Arduino 主机代码

    谢谢、

    Riju  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Riju、

    第二个数据包{0x55、0xAA、0x06、0x04、0x01、 0x01、0x01、0x07、0x00}看起来正常。

    如果 i2040未进行堆叠、则可能是硬件问题(即上拉)或软件(即 i2040未正确配置/重新编程)。

    但 i2040似乎正在对地址进行堆栈、这应表明已正确对其进行编程。

    如果 i2040正在堆栈'Write'命令、那么我假设它也在堆栈'Read'命令。 发送'read'命令后您会得到什么? 您有任何屏幕截图吗?

    您使用的是哪种 I2C 速度?

    此致、

    Luis R

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Luis、

           下面是我要做的:

    1) 1)根据 James 的回复更改了 TI 代码的宏在 EVM (MSP430i2040)上下载了相同的文件、使其作为 I2C 从设备运行

    2)制作了 Arduino 代码、使其作为主机运行、并发送命令 {0x68、0x99、0x99、0x99、0x99、0x99、 0x99、0x99、0x68、0x23、0x03、 0x52、0x00、0x00、0xDE、0x16}、 根据 TI 文档(slaa638)中提供的串行通信命令创建:

    #include 
    int i2c_slave_address = 0x0A;// TI 的 I2C 从器件地址
    //int i2c_slave_address = 0x48;// TI 的 I2C 从器件地址
    //int CMPH、CMTL;//命令高数据和低数据字段
    字节 COMMAND_FRAME[]={0x68、0x99、0x99、0x99、0x99、0x99、0x99、 0x99、0x99、0x68、0x23、0x03、 0x52、0x00、0x00、0xDE、0x16};
    //byte COMMAND_FRAME[]={0x55、0xAA、0x06、0x04、0x01、 0x01、0x01、0x07、0x00};
    //55AA0604010101010700
    void setup (){
    Wire.begin();//启动线库
    Serial.begin(9600);
    int l = sizeof (command_frame);
    delay (1000);
    Wire.beginTransmission(i2c_slave_address);
    for (int i=0;i 
    

    3) 3)连接 Arduino 和 EVM 的 SDA 和 SCL 引脚后执行上述代码

    4)但我仅接收 FF 作为输出

    我需要实现的目标:

    1)来自 EVM 的正确响应帧(计量数据)、适用于 TI 文档(slaa638)链接:http://www.ti.com/general/docs/litabsmultiplefilelist.tsp?literatureNumber=slaa638中给出的各种命令

    如果有人能够列举实现相同目标的分步方法、将会有巨大的帮助  

    谢谢、

    Riju

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Abhed、Luis、James、

                       我尝试发送另一个命令帧 {0x04、0x02、0x00、0x05、0x01、 0x0C、0x00}通过 I2C 从 Arduino (主机)到 MSP (从机)、这是我根据 EMDC 技术指南中提供的通信协议制作的、我希望在其中获取应用程序版本以进行响应、但我仍然无法获得预期的响应

    谢谢、

    Riju   

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Riju、

    您使用的是 SLAA638还是 EMDC 中的代码? 上述步骤适用于将 I2C 与 EMDC 搭配使用、后者的协议与 SLAA638不同。

    您可以在 EMDC 文档中找到有关 EMDC 协议的详细信息。

    例如,在封装中{}0x55,0xAA,0x06,0x04,0x01,0x01,0x01,0x07,0x00

    0x55、0xAA:EMDC 协议的标头(packet_sync + packet_blank)

    0x06:数据包长度

    0x04:设计中心 ID

    0x01:命令=配置模式

    0x01:R/W =写入

    0x01:应用模式=激活

    0x07、0x00:校验和(0x04 + 0x01 + 0x01 + 0x01的总和)

    此致、

    Luis R

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Luis、

           感谢您的有效回答、我正在使用 EMDC 代码。TI 的某个人先前曾向我指出、我可以查看 slaa638的协议、无论如何1)我尝试使用上述数据包(55AA06040101010700)、但仍未获得任何输出、 和2)我在上述链接中提供的 EMDC 通信协议文档中找不到有关接头(55AA)的信息

    谢谢、

    Riju

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Luis、

           我在主机(Arduino)端修改了代码、并重新检查了连接并刷新了 EMDC 代码、MSP 似乎正在堆叠至我的命令 {0x55、0xAA、0x07、0x04、0x01、 0x00、0x01、0x06、0x00}、其中包含以下内容:6 4 1 0 6 0、我希望解码如下:

    6 -数据包长度

    4 -设计中心 ID

    1-命令(配置模式)

    1 -写入

    0 -应用模式(空闲)

    6 -校验和 LSB

    0 -校验和 MSB

    但现在、当我将命令帧更改为 {0x55、0xAA、0x07、0x04、0x02、 0x00、0x05、0x00、0x0B、0x00}根据 EMDC 文档、期望应用版本作为输出 MSP 以相同的6 4 1 0 6 0对我做出响应、您能帮助我了解我如何接收各种参数、例如电压(Vrms 等)、作为输出/响应的电流

    谢谢、

    Riju

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Riju、

    • 我认为您的第一个数据包存在问题、因为您的有效载荷+校验和长度为6字节。 您看到的响应可能来自之前的命令(?)。

    我在我的一侧尝试过它、我可以看到器件不能正确处理该数据包以及后续数据包。

    • 关于您对标题的问题、您回答正确、EMDC 指南中未明确说明此信息。

    EMDC 使用基于 CapTIvate 设计中心的协议、需要接头通过 HID 桥进行通信。 您可以在 CapTIvate 技术指南中找到更多信息 查看"使用 HID 桥"部分、此处的屏幕截图可为您提供便利:

    • 有关从器件获取数据的问题:

    *默认情况下、器件处于空闲模式。 其他2种模式为校准和激活

    *当器件处于活动模式时、它将在结果准备就绪后开始定期发送结果。

    *在我之前的帖子中、我展示了如何将器件置于活动模式。

    *此功能的代码位于:

    MAIN->EMLibGUIApp_Engine->HMI_stateMachine -> HMI_processPhaseResults (仅在活动模式下调用)->HMI_sendPhaseResults (如果结果就绪则调用)

    *需要注意的一点是、在使用 UART 和 I2C 之间输出信息的功能略有不同。

        -在 UART 模式下、器件不必等待主机、只需按顺序输出所有信息。

        -在 I2C 中、通信仅由主机发起、因此 MSP430将把数据放入缓冲区并使用 GPIO 发起请求。 您可以在 I2CSlave_setRequestFlag 中找到实现。 用于发起请求的引脚由 I2CSLAVE__REQ_Pdir、I2CSLAVE__REQ_pout、I2CSLAVE__REQ_MASK 定义。

    请注意、创建当前方法的目的是简化校准过程、并持续向 EMDC GUI 发送数据。 当前没有特定命令可按需请求特定值;但是、您可以根据需要修改现有命令或添加新命令。

    此致、

    Luis R

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Riju、

    Luis 不在办公室、因此我想检查一下他的最新答复是否有助于解决您的问题。 谢谢!

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、James、Luis、

                 感谢您对该问题的宝贵见解,我们已经确定了 Luis 在数据包中指出的认证,然后发送了正确的数据包,现在我们将根据 EMDC 文档按顺序发送各种命令 :

    1) 1)在重新启动器件后立即发送读取应用程序版本命令一次、响应为0FFFFFFFF、在第二次接收到所需的响应 542170时发送该命令、

    2)按照 EMDC 文档协议交换的初始命令概述中所述的读/写命令进行操作、根据该文档、主机应接收所有结果参数的值、如 Vrms、IRMS 等。 但接收到的实际响应仅为 E48B11730000009B、这与视在能量结果相对应、即使在轮询之后也是如此
    那么、我们如何实现所有结果参数、敬请检查、我已经在 e2e 线程上发布了类似的查询
    谢谢、
    Riju
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Luis、

           另一个澄清是、当您说"请注意、创建当前方法是为了简化校准程序、并持续向 EMDC GUI 发送数据。 当前没有特定命令可按需请求特定值;但是、您可以根据需要修改现有命令或添加新命令。" 这是否意味着对于当前使用的代码、我将不会获得以下结果参数:

    1) Vrms

    2) IRMS

    3) Vpeak

    4) IPEAK

    5)功率因数

    6) 6)频率  

    7) 7)有功功率

    8)无功功率

    9)视在功率

    10)有功电能

    11)无功电能

    12)视在能量

    通过 I2C 通信、即使在遵循 EMDC 文档中遵循的步骤(初始命令交换时序图)之后也是如此

    谢谢、

    Riju

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Riju、

    请记住、随 EMDC 一起发布的应用代码旨在支持 UART 通信、因此、尽管我们在进行了一些更改后 I2C 通信现在仍在工作、但似乎应用代码中的其他内容应该进行更改、以使此命令能够发回所有结果 (因为它通过 UART 正常工作)、而不仅仅是最后一组结果、即视在电能。 路易斯和我还有其他紧迫的优先事项、但将研究发生这种情况的原因、并在星期五之前回复您。 谢谢。

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    尊敬的 James:

             感谢您的响应、我们将热切地等待您的最终更新

    谢谢、

    Riju

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Riju、

    当使用 UART 将器件置于活动模式时,它将调用 HMI_processPhaseResults(),并将按顺序(即 VRMS->IRMS->Vpeak 等)通过 UART 自动发送结果。

    使用 I2C 时、MSP430仍在调用该函数、并且仍会尝试从 VRMS 开始发送该函数。 但是、在 I2C 中、器件不能只在需要时传输数据(因为主器件始终启动通信)、因此 MSP430会将数据放置在缓冲器中、然后设置请求标志/引脚。 如果您的主机未检查此引脚、则它将永远不会请求数据、MSP430将超时、然后它将尝试发送下一个数据包(即 IRMS、Vpeak 等)。

    一个选项是更改主机以检查此请求引脚、并且每次只从 MSP430读取数据。 此选项不需要对 MSP430进行任何更改、但您必须在 I2C 主设备上实现该功能。

    另一个选项是创建/修改命令、此选项的一个优点是可以根据需要请求数据。 我认为这种选择可以满足您的需求、因此我将解释如何执行

    此示例展示了如何添加命令以发送 VRMS。 请注意、我使用命令0x02 (应用程序版本)作为起点:

    1.在 emDCCommandHandlers.c 中创建函数原型

    2.在同一文件中注册命令侦听器

    3.在 emDCCommandHandlers.h 中定义新的命令 ID (请注意,我的“新命令”与 COMMAND_RMS_ID 相同,后者是从器件发送的响应,但我将其添加为新的定义,以备您自定义之用)

    4.在 emDCCommandHandlers.c 中写入新函数(请注意、当主控方尝试"写入"时、我的函数会忽略、当主控方尝试"读取"时、它会发送 VRMS 的最新值)

    5.增加 comm_config.h 中的命令侦听器数量


    6.测试新命令(0x80)  

    请注意、我的"VRMS"可能没有意义、因为我只是尝试发送增量虚拟数据来测试我的实现;但是、它包括:

    0x0A (LEN 10字节)、0x04 (ID)、0x80 (VRMS ID)、0x01 (写入)、0x01 (A 相)、 0x001EB59A (VRMS 有效载荷)、0x01F3 (校验和)

    可以按照相同的步骤发送所有其他参数。

    我希望这对您有所帮助、如果您有其他问题、请告知我们。

    此致、

    Luis R

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Riju、

    我希望事情进展顺利、Luis 的详细说明有助于解决您的问题。 您是否能够使通信正常工作? 谢谢。

    此致、

    James

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Luis、

          非常感谢您、在执行您之前的响应中提到的给定更改后、我能够重现相同的结果、只有一个简单的澄清、我才能够正确地解释我们从主器件发送的数据包上的字节:

    55 AA -插头

    07 -长度

    04 - 设计中心 ID

    80 - Vrms 命令

    00 -读取

    00 -无关(请澄清)

    00 -无关 (请澄清)

    84 00 -校验和

    谢谢、

    Riju

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Riju、

    路易斯今天已经结束了一天的工作、所以我会在他外出时尽力提供帮助。 这两个字节被视为"无关"、因为它们是空的有效负载字节、因为长度已定义为7 (字节)。 命令处理程序正在寻找 VRMS 命令、因此它们实际上无关紧要。 我怀疑您可以将长度从7更改为5并删除这两个字节、因为校验和也不会改变、所以行为是相同的。

    我希望这是有道理的。

    此致、

    James