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.

DLP NIRScan Nano UART4口:能否提供一些标准的Scan命令,读取数据的串口格式数据串?

Other Parts Discussed in Thread: DLPC150

J3 UART4的通信格式写的粗,不是很容易手写数据去做简单调试。可否有一些标准的UART 串来学习下

  • 有一个简单例子:

    Read Tiva version information:读TIVA 版本信息:

    CommandID:

    NNO_CMD_TIVA_VER

    接口在UARTCmdHandler.c中:

    cmdUARTRead(CMD1_TYPE cmd1)

    查询到ID号码:

    在cmdDict.c

    的第56行(大约)

    { NNO_CMD_TIVA_VER, cmdVersion_rd }, /* 0x0216 */

    具体在cmdProc.c

    1125行实现:

    bool cmdVersion_rd( void ) /* 0x0216 */

    具体看需要DLPC150版本, TIVA版本信息和

    EEPROM_CALIB_VER_ADDR组成.

    Tiva SW Version (4)

    ● ● DIS(2)

    DLPC SW Version (4)

    DLPC Flash Version (4)

    DLP Spectrum Library Version (4)

    EEPROM Calibration Version (4)

    EEPROM Reference Version (4)

    EEPROM Scan Configuration

    Version(4)

    整个驱动在uartstdio.c中.

    对于PC端,参考: NIRScanNanoGUI:

    中API.cpp

    第63行: static int NNO_Read(int isUART = 1 )

    具体调用在

    mainwindow.cpp

    49行读 deviceStatus:

            if((ret_val = NNO_ReadDeviceStatus(&device_status)) == PASS)

    和testtab.cpp

    175行:

    读电池电压:

        if ( ( result = NNO_ReadBattVolt( &pBatt_Volt ) ) == PASS )

  • 非常感谢!
    UART的通信格式以及没问题了,tiva能正常回应了。谢谢!
     我用usb抓包软件抓了GUI的数据,大概知道了流程。
     现在的问题是读出scan数据的格式是怎样的?
  • USB可以工作,但UART突然出问题:永远回复41 42 43 44 10 00 00 00 10 00 00 00 44 43 42 41。之前很多命令都得到正确的回复的

  • UART to USB的转换板有问题了,换了另一块,UART通信就正常了。

    但送出NNO_CMD_FILE_GET_DATA命令(c0 00 02 00  2e 00)后,响应不正确。

  • 要确认输出给TIVA的是这些指令.是否确定TIVA收到?可以调试一下TIVA收到与否.
  • 谢谢!Jeremy Wu先生麻烦给我发邮件,teddyguo@126.com

    看了源码,找到了ScanDataStruct,以及InterpretDataStruct,但与USB抓包数据还没能对照上。

    我是用一个资源有限的MCU来读取NIRScanNano的UART的数据,然后再与装置中的其他数据一起通过WiFi发送出去。本人一直是做汇编,C不是很熟。可否帮忙解释下ScanDataStruct,最好是与USB抓包数据对应上。(可提供USB抓包数据)

    另:UART通信现在正常,只是还没能正确读取到ScanData,发送NNO_CMD_FILE_GET_DATA时,Tiva回复10 00 00 00 10 00 00 00,错误命令。

  • 我现在通过串口读取数据,接收到的数据和发送的数据一样,是什么情况呢?能否给我个完整的串口指令?不胜感激!
  • UART command list 在:第88页.

    通讯设置为:

    • Bits per second: 115200

    • Data Bits: 8

    • Parity: None

    • Stops bits: 1

    • Flow Control: None

    命令格式是:

    读时序:

    写时序:

    现在支持的命令集是:(可以软件增加)

    参考91, 92, 93,94.

    可以测试一下:

    Reset Tiva NNO_CMD_TIVA_RESET WRITE 0x02 0x1A 0 0

  • 非常感谢!已经能读到scan data,正在研读源码,看如何解析?
  • 我的邮箱teddyguo@126.com

  • 在看源码,有关GUI命令及数据传送部分都可与UART相关,感觉可以单独用UART连接到pc,且GUI软件是可以认的。

    但我不接USB,只接UART,GUI软件上不能认可连接上。

    不知如何去设置GUI,使得用UART也能执行scan并获得回传数据,显示波形。

    GUI保存在PC里的CSV文档和dat文档,其中CSV文档的intensity数据列可以画出正确的感度曲线。但在dat中似乎找不到对应的数据,查看源码,尚未看明白CSV的数据是如何产生的。

    本人C和C##的水平太low,只能看懂语句,数据结构倒来倒去就给烧拧了。

    哪位高人帮忙梳理一下:scanData结构是如何解析到scanResults结构的。万分感谢~

  • 发了一些解析格式.
  • hi Jeremy

    dlpspec_scan.h 中定义的解析函数能提供源码么,目前是个.a 的库文件,想知道是如何解析扫描数据的。

    谢谢~

    如:

    DLPSPEC_ERR_CODE dlpspec_scan_read_configuration(void *pBuf, const size_t bufSize);

    DLPSPEC_ERR_CODE dlpspec_scan_write_configuration(const scanConfig *pCfg, void *pBuf, const size_t bufSize);
    DLPSPEC_ERR_CODE dlpspec_scan_interpret(const void *pBuf, const size_t bufSize, scanResults *pResults);
    DLPSPEC_ERR_CODE dlpspec_scan_write_data(const scanData *pData, void *pBuf, const size_t bufSize);
    DLPSPEC_ERR_CODE dlpspec_scan_interpReference(const void *pRefCal, size_t calSize, const void *pMatrix, size_t matrixSize, const scanResults *pScanResults, scanResults *pRefResults);
    int32_t dlpspec_scan_genPatterns(const scanConfig* pCfg, const calibCoeffs *pCoeffs, const FrameBufferDescriptor *pFB);
    DLPSPEC_ERR_CODE dlpspec_scan_bendPatterns(const FrameBufferDescriptor *pFB , const calibCoeffs* calCoeff, const int32_t numPatterns);
  • 从ti官网上下载DLPSpectrumLibrary 2.0.3,安装后就有source code了

  • 在一些nano友的帮助下,用QT环境直接编译原版的GUI的source code,可以运行并且能够设置断点,单步运行调试。

    但原版的Source code的库部分的编译,是在编译产生了obj文件后,直接封装了库.a来给其他地方调用,但封装成库以后,单步就不能进入库函数去跟踪了。

    哪位gcc高手可以帮着不用封装成库的方式进行linker,这样可以进入那些函数的跟踪,可以更方便的理解数据解析部分及序列化和反序列化的函数了。

    多谢!不封装成库,直接编译源码再链接,请高手出场~

  • 我现在搞UART的通信 ,发出的都给我回复41 42 43 44 10 00 00 00 10 00 00 00 44 43 42 41。我刚刚接触 ,我想知道你发送的是怎么计算来的。能不能给一个具体指令的例子。
  • 您好!

    请尝试如下Sequence读取device status

    具体请参考EVM User Guide

    谢谢

  • 嗯嗯 ,我知道错哪里了 谢谢
  • 去年上半年做的,差不多忘记了。反正很多坑,UART读取数据是第一步,移植到嵌入式平台做解析是第二步。最终在M4 MCU上移植成功反射率的数据解析,从UART口再发出来的数据,用excel表格做图,与电脑端软件的图一样的。
    今年计划把解析好的数据发到阿里云上去......