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.

[参考译文] DLPNIRNANOEVM:通过 UART 进行通信

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

https://e2e.ti.com/support/dlp-products-group/dlp/f/dlp-products-forum/821320/dlpnirnanoevm-communication-over-uart

器件型号:DLPNIRNANOEVM

你(们)好  

我正在尝试通过 UART 扩展连接器与 NIRscan Nano 通信。  

我编写了一个 python 脚本、可以通过我连接 NIRscan 的 COM 端口打开、关闭、写入和写入。  

但是、我很难定义我必须发送的字节以获得有用的响应。  

现在、我只是尝试获取任何响应、以便我可以确认我的设置是否正常工作。  

根据他的文档、我需要发送以下内容:  

-起始字节65 66 67 68

-校验和字节??? ?? ?? ??

-标志字节11????0

-序列?

-长度??

-命令??? ??

-数据42 (我想执行"读取文件列表")

-结束字节68 67 66 65

导入序列
导入时间

序列= serial.Serial(
端口='COM6'、
波特率= 115200、
奇偶校验= serial.parit_none、
stopbits=serial.stopbits_one、
字节大小= serial.EIGHTBITS、
timeout=1
)

ser.flushInput()
ser.flushOutput()

如果 ser.is_open == 1:
打印("端口打开")

start_Bytes =字节数组([65、66、67、68])
SER.WRITE (start_bytes)

校验和字节=字节数组([0、0、0、0])
SER.WRITE (校验和字节)

FLAG_BYTE = 112
SER.WRITE (flag_BYTE)

sequency_byte = 0
SER.WRITE (sequency_byte)

length_bytes =字节数组([0、0])
SER.WRITE (length_bytes)

COMMAND_bytes =字节数组([42、0])
SER.WRITE (COMMAND_Bytes)

data_bytes =字节数组([0、0、0])
SER.WRITE (DATA_Bytes)

end_Bytes =字节数组([68、67、66、65])
SER.WRITE (END_Bytes)

打印("已发送数据")

print (ser.read())

ser.close()
如果 ser.is_open =0:
打印("端口已关闭") 

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

    更新:  

    我已经从微控制器收到错误消息: b'abcd\x10\x00\x00\x00\x10\x00\x00\x00DCBA'

    我猜我的程序发送和接收效果很好、但我发送的内容可能是错误的。  

    要执行'Read file data'命令、我提供了以下值以供发送:  

    值=[65、66、67、68、10、0、 0、0、0、0、1、 0、45、2、68、67、 66、65]

    是否有人可以检查此命令的此序列是否正确?

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

    Nick、  

    请注意您尝试发送的命令的正确 UART 字节序列:

    0x41、0x42、0x43、0x44–(起始 ID)

    0xF0、0x00、0x00、0x00–(校验和)

    0xC0 -(标志:读取(1)、请求应答(1)。 休息0)

    0x00 -(序列字节)

    0x02、0x00–(命令长度+数据)

    0x2E、0x00 (命令字节、组字节)

    0x44、0x43、0x42、0x41 (结束 ID)

    请尝试此序列、看看您是否能够获得正确的回复?

    谢谢、此致、

    Hirak。

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

    Hirak、

    感谢您提供信息。  

    我现在可以发送命令来打开和关闭灯,获取设备状态,...

    因此、我能够发送 en receive 命令。

    接下来要做的是接收存储在 SD 卡上的文件。  

    但我在努力发送命令中的正确"数据"。  

    首先、我不想通过 UART 执行"读取文件列表大小"命令。  

    用户指南指出、数据有效载荷输入需要1个字节、但我不清楚它应该是什么。  

    它只是显示"nnlo_file_scan_list"

    可以帮帮我吗?

    此致

    Nick  

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

    Nick、

    nNo_file_scan_list 和用户指南中的其他类似大写值在 Tiva 源代码或 Spectrum Library 源代码中定义。

    这个特定的代码位于 Tiva 和 GUI 源代码中的 Common/include/NNOCommandDefs.h 下

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

    我查看了代码、感谢您指出代码的位置!  

    我尝试以输入字节的形式发送'6'、因为这是 'NNO_file_scan_list'枚举中的编号'NNO_file_type'。  

    不幸的是、我没有得到我认为应该得到的响应。  

    发送的消息为:  

    字节 readFileListSizeCMD[]={65、66、67、68、
    244、0、0、0、
    192、0、3、0、
    43、0、6、
    68、67、66、65
    }; 

    器件响应:65 66 67 68 237 0 0 0 192 0 2 0 43 0 68 67 66 65  

    因此、它不会对任何数据做出响应、而是插入了包含扫描数据的 SD 卡。  

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

    您好、Nick、  

    这是否与您在另一个主题中询问的问题相同? 如果是、我将因重复而关闭其中一个。  

    谢谢、此致、

    Hirak。

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

    你(们)好 Hirak

    是的。 很抱歉重复此操作。

    期待收到解决方案。  

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

    您好、Nick、  

    您需要按照以下步骤从 SDCard 读取扫描数据。  

    1.发送命令"nNO_CMD_FILE_GET_READSIZE"、参数为"NNO_FILE_SCAN_DATA_FIT_SD"(位于文件"NNOCommandDefs.h"中)。 此命令将返回存储在 SDCard 中的扫描数据的读取大小。

    2.发送命令"nNFO_CMD_FILE_GET_DATA"以获取包含来自 SDCard 的串行格式扫描数据的响应。  


    请按给定的顺序尝试以下步骤、并查看您是否能够获得正确的响应。  


    谢谢、此致

    Hirak。

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

    您好 Hirak、  

    我已经尝试过这种方法。 我发出了以下命令来发送:  

    字节 readFileSizeCMD[]={65、66、67、68、
    247、0、0、0、
    192、0、3、0、
    45、0、7、
    68、67、66、65
    }; 

    7是表示'NNO_file_scan_data_from _sd'的参数。 我认为我的校验和和和其他字节是正确的。 请检查此项。  

    我得到的响应始终相同。 即使我执行存储在 SD 上的扫描也是如此。 那么、我希望数据大小响应会有所不同吗? 我得到此响应: 65 66 67 68 239 1 0 0 192 0 6 0 45 0 238 14 0 68 66 65 22。

    'NNO_CMD_FILE_GET_DATA'的字节格式如下:

    字节 readFileDataCMD[]={65、66、67、68、
    240、0、0、0、
    192、0、2、0、
    46、0、
    68、67、66、65
    }; 

    此命令的响应如下:  

    65 66 67 68 198 96 0 192 0 0 2 46 0 116 112 108 0 117 14 0 83 40 117 99 35 99 99 99 99 99 99 99 99 99 106 106 118 118 117 36 40 102 35 102 35 41 99 35 118 99 99 118 99 35 99 35 99 118 35 118 99 118 105 35 105 35 41 0 20 0 0 0 3 0 0 0 0 0 8 0 0 0 8 0 0 0 40 0 0 0 0 96 3 0 1 0 0 0 67 111 108 117 109 110 32 49 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 15 3 31 2 7 5 55 210 48 227 10 0 182 14 1 0 75 0 173 141 45 12 216 23 192 159 53 144 76 108 243 168 63 254 133 115 25 26 191 243 216 145 173 220 209 155 64 239 118 36 247 142 128 236 191 155 124 200 22 145 2 49 191 54 48 48 49 53 50 0 237 0 24 25 64 0 17 0 54 49 48 48 49 53 50 0 67 111 108 117 109 110 32 49 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 132 3 164 6 6 228 0 6 0 6 0 4 1 0 193 0 0 0 87 2 0 182 1 0 7 0 214 1 0 206 3 0 27 3 0 2 0 0 159 2 0 0 59 1 0 174 1 0 254 1 0 0 72 2 0 202 2 0 31 2 0 0 158 2 0 2 0 0 130 3 0 241 2 0 255 2 0 0 61 2 0 0 48 3 0 0 0 238 2 0 0 132 0 0 0 99 2 0 215 3 0 78 2 0 43 3 0 211 2 0 0 129 3 0 0 103 4 0 172 2 0 173 3 0 220 1 0 0 239 3 0 0 14 1 0 218 2 0 160 2 0 121 3 0 205 3 0 96 4 0 152 3 0 13 0 0 240 2 0 17 2 0 251 2 0 0 0 54 2 0 0 93 3 0 232 255 255 203 3 0 168 2 0 22 3 0 46 3 0 241 1 0 211 3 0 0 7 0 0 0 94 3 0 101 4 0 119 2 0 0 156 3 0 0 125 3 0 47 3 0 168 1 0 78 2 0 163 1 0 123 68 67 66 65  

    它发回528个字节、我看到终结器(68 67 66 65)字节、因此我假设通信正常。

    将此响应转换为 ASCII 会给我一些我可以在.dat 文件中识别的片段,但它与完整的 SD 文件远远不符。  

    我认为命令、我发送的参数、校验和、LSB、MSB 仍然有问题...

    我可能正在读取一个不同的文件、而不是 SD 卡。  

    Nick

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

    你(们)好 Hirak

    您是否知道我何时可以得到一些答案?  

    此致

    Nick  

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

    您好、Nick、  

    我将尝试研究这个问题、并在本周返回给您。 希望这起作用。  

    谢谢、此致、

    Hirak。

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

    Nick、您好、我们正在研究这个问题、我正在前端开发一个小代码来测试命令的响应。 我们将很快向您回复结果。 感谢您的耐心等待。

    此致、

    Hirak。

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

    您好、Nick、  

    串行扫描数据的大小固定为3822字节。 因此、每次运行 NNO_CMD_FILE_GET_READSIZE 时、您将获得与接收到的响应相同的响应。 您可以通过将 microSD 卡插入另一个设备并检查扫描.DAT 文件大小来确认这一点。

    此外、从 NIRSCANNANO 发送的 UART 数据包对于命令+数据具有512字节的大小限制。 因此 、第一次发送 NNO_CMD_FILE_GET_DATA 数据只会得到实际扫描数据的512-2 = 510字节。 您必须多次运行此"NNO_CMD_FILE_GET_DATA"才能获取完整扫描数据。

    为了进一步说明、每次发送 NNO_CMD_FILE_GET_DATA 命令时、都会返回528字节的数据包。 删除起始字节(4)、校验和字节(4)、标志字节(1)、序列字节(1)、长度字节(2)和命令字节(4)后、您将到达扫描数据。 您还必须将最后4个字节丢弃为结束字节、这将使您的数据包变为528 - 16 = 512字节、这将形成命令+数据包。 删除此数据包的前两个字节作为命令字节、现在剩余的字节(510)将是实际扫描数据。  

     通过多次发送 NNO_CMD_FILE_GET_DATA 来汇编整个扫描数据后、必须使用 DLP Spectrum Library 对从接收数据形成的扫描数据斑点进行反序列化、以获取实际的扫描信息。

    步骤如下:

    1.将 NNO_CMD_FILE_GET_READSIZE 与 NNO_FILE_SCAN_DATA_FRO_SD 参数发送一次。

    2.多次发送 NNO_CMD_FILE_GET_DATA、按照上述步骤提取和汇编扫描数据 blob。

    3.使用 DLP 频谱库进行反序列化、以获得反序列化、可分析的格式的扫描数据。  

    希望这对您有所帮助。  

    谢谢、此致、

    Hirak。