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.

[参考译文] CC1310:使用 Uniflash 检测连接的器件

Guru**** 2392435 points
Other Parts Discussed in Thread: CC1310, UNIFLASH, CC1311R3, CC1312R

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

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1096393/cc1310-detect-connected-device-with-uniflash

器件型号:CC1311R3
主题中讨论的其他部件:CC1310UNIFLASHCC1312R

您好!

我们正在对不同的器件 CC1310和 CC1312进行编程、但现在我想检测在控制台级别连接的器件。 对于闪存编程器2、有一个选项  

-ls auto

Uniflash 是否有类似的东西?

我找到的唯一工具是列出已连接的编程器、但这不是我需要的。

此致、

Martin

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

    https://software-dl.ti.com/ccs/esd/uniflash/docs/v6_2/uniflash_quick_start_guide.html

    您是否能够使用本页中描述的"CLI 设备检测器"?  

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

    但它不会输出 器件、仅输出编程器

    ./detect-devices.sh 
    0)  TIXDS100v3_Dot7_Connection  

    或者我是否错过了什么?

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

    您好 Martin、

    UniFlash 器件检测器只会为 LaunchPad 等现有套件挑选器件。 如果是定制板、则仅检测调试探针(如您所见)。

    对于即将推出的器件、我们正在研究能否在所有情况下检测器件。 目前没有解决方案。

    Ki  

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

    好的、好得知道、由于闪存编程器2比 Uniflash 好得多、因此可以检测到:

    Texas Instruments SmartRF Flash Programmer 2 v1.8.2-windows
    -------------------------------------------------------------------------------
    
    
    -------------------------------------------------------------------------------
    
     Connected devices:
    
     ------------------
    
     0 Device: Texas Instruments XDS100 Ver 3.0 A, ID:XDS-FT4P4QFPA
    
               Chip: CC1310
    
      Chip Revision: B (2.1)
    
               Debug interface is locked.
    -------------------------------------------------------------------------------

    如果将 srfprog 移植到 Linux 和 OS x、或者源代码将被发布、那将会很好。

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

    器件型号:CC1311R3

    您好!

    闪存编程器2是否有支持 cc1311的 device_info.xml 版本?

    由于 Uniflash 无法检测连接的芯片、我需要使用闪存编程器2、但在连接 cc1311时遇到此错误:

    Texas Instruments SmartRF Flash Programmer 2 v1.8.2-windows
    -------------------------------------------------------------------------------
    
    Failed to enumerate XBAL devices.
    An XDS emulator may have incompatible firmware. See Help document for troubleshooting.

    我认为 device_info.xml 应该已经足够了、 并尝试自己添加 cc1311、但我不确定哪一个是正确的器件 ID、数据表和手册中都没有提到、我只发现它位于0x138的 FCFG1、但我不确定地址。

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

    尊敬的 Martin:

    我们目前不会为新器件更新闪存编程器。 建议使用 Uniflash 工具。

    谢谢、

    玛丽·H

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

    感谢您的回答。

    但 Uniflash 不支持闪存编程器2所具有的所有功能、因此、如果您至少能建议我如何使用闪存编程器2来检测所连接的器件、那将会非常棒。 也许您可以帮助我更改 xml 文件、这样它至少会检测到连接的设备。

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

    尊敬的 Martin:

    您缺少哪项功能?

    闪存编程器2不支持 CC1311。

    谢谢、

    玛丽·H

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

    例如、检测连接的器件时、uniflash 只能检测连接的编程器、而不能检测连接的器件。

    在所有不可用器件的实际情况下、我们使用不同的器件、CC1310、CC1311和 CC1312在生产中、因此我们需要检测连接了哪个器件以选择合适的软件。

    函数是  

    srfprog.exe -ls auto
     我发现 uniflash 没有等效项、就像我在 https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/1096393/cc1310-detect-connected-device-with-uniflash/4061736?tisearch=e2e-sitesearch&keymatch=%252520user%25253A104576#4061736上已经问过的那样

    顺便说一下、我认为 Uniflash 比闪存编程器2慢得多、如果您每月对2-3k 进行编程、这会有所不同。

    但是、是否可以将 CC1311添加到 device_info.xml 中、以便能够检测到它?

    如果 TI 不想再支持闪存编程器2,那么源代码是否无法发布?

    发布的源仅为 QT 5.7安装程序。

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

    尊敬的 Martin:

    我们目前不打算发布闪存编程器的源代码。

    谢谢、

    Marie  

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

    您好、Marie、

    好的、但最好至少有一个工具来检测适用于 CC1311的已连接器件。

    例如、Smart RF Studio 看起来与闪存编程器2构建在几乎相同的平台上、甚至菜单上有打开闪存编程器2的按钮、如果您使用 CC1311、它支持 CC1311。 因此、请提供一个适用于 CC1311的工具、Uniflash 没有此函数、因此它不是替代工具。

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

    尊敬的 Martin:

    您可以使用与 Smart RF Studio 捆绑的无线电测试库:

    https://www.ti.com/tool/SMARTRFTM-STUDIO

    https://software-dl.ti.com/lprf/smartrftm_studio/docs/rtlib/html/index.html

    遗憾的是、我们没有任何 CC1311编程示例、因此您需要在 Qt 中实现自己的应用。

    谢谢、

    玛丽·H

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

    感谢您的提示、但首先、如果您更新手册、您可以在 doc 文件夹中说必须安装 Visual Studio Express 2013和 qt 5.7、这对于最新版本是错误的、 但这仅记录在您的站点中难以找到的一个页面上。

    但无论如何、CC1311甚至不在支持的器件列表中、只有一个未发布的 cc1314。 列表中甚至没有 CC1312、是否有比 列出 CC1312和 CC1311的1.27.0更新的版本?

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

    尊敬的 Martin:

    我同意、文档需要更新、但库的1.27.0版确实支持 CC1311和 CC1312。

    此致、
    尼古拉伊

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

    好的、很好知道、但由于示例和文档中未提及这些器件、器件名称 CC1311R3和 CC1312R1是否正确?

    您能给我一个简短的示例吗?如何像 srfprog 那样检测连接的器件?

    这些示例仅显示如何连接到已知目标,枚举的 EBS 是否有任何有关已连接设备的信息或仅是枚举?

     getRfDevNameFromDevId()是否起作用,或者它是否仅在器件已处于射频调试状态时可用?

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

    尊敬的 Martin:

    我创建了以下示例、该示例将输出将 XDS 序列号映射到器件名称的已连接器件的列表。 您应该能够 对其进行修改以将其集成到您的系统中(使用 UniFlash 对闪存进行编程)。

    示例是对 radio_test_lib_app_ex 的修改。 只需将该示例中的主函数替换为以下函数即可。 您可以删除 main.cpp 中的大多数(如果不是全部)其他函数

    int main(int argc, char *argv[])
    {
        QCoreApplication a(argc, argv);
    
        pOut = std::make_unique< QTextStream >(stdout, QIODevice::WriteOnly);
    
        RTLDevice26_13xx dummyDevice;
    
        QStringList listEbs = dummyDevice.enumerateEbs();
    
        QMap<QString, QString> devMap;
    
        for(const QString & eb : listEbs)
        {
            devMap[eb] = dummyDevice.getRfDevNameFromDevId(eb);
        }
    
        *pOut << "Connected devices: " << endl;
        for (const QString  & ebId : devMap.keys())
        {
            *pOut << ebId << "\t" << devMap[ebId] << endl;
        }
    
        return(0);
    }

    此致、
    尼古拉伊

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

    感谢这个示例、我刚刚设法使检测工作、甚至可以刷写所有器件、唯一不起作用的是批量擦除、我尝试将擦除信息类型设置为 et_erase_all_forced、但它没有做到这一点、 您能给我一个如何触发批量擦除的提示吗?

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

    也许并非所有文件都包含在库中、在线文档中提到了一个文件 https://software-dl.ti.com/lprf/smartrftm_studio/docs/rtlib/html/main_01-_01mass_01erase_8cpp.html

    您能提供吗?

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

    尊敬的 Martin:

    使用 eraseFlash()并将擦除信息类型设置为 et_erase_all_forced 应该起作用。 您是否记得 按照文档中的说明重新连接到设备?  

    此致、
    尼古拉伊

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

    我刚刚尝试过,但我返回了连接错误,下面是我的简化代码:

    pTestDevice = new RTLDevice26_13xx();
    
    ebList = pTestDevice->enumerateEbs();
    
    deviceId = ebList.takeFirst();
    deviceName = pTestDevice->getRfDevNameFromDevId(deviceId);
    
    DisconnectOnLeave disconnectGuard{ deviceId };
    
    EraseInfo_t eraseInfo;
    RTLDevice::initEraseInfo(&eraseInfo);
    eraseInfo.type = ET_ERASE_ALL_FORCED;
    
    status = pTestDevice->eraseFlash(deviceName, deviceId, &eraseInfo);
    
    pTestDevice->disconnect(deviceId);
    status = pTestDevice->connect(deviceName, deviceId);
    
    if (status != RTLDevice::TST_OK)
    	{
    	*pOut << status << "Erase failed!" << endl;
    	printLastError(pTestDevice);
    	return (EXIT_FAILURE);
    	}

    或者、我以前尝试过连接、但它没有改变问题

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

    尊敬的 Martin:

    我相信您在擦除闪存之前确实需要连接。

    我看到无线电测试库示例中使用的器件名称具有后缀"_PROP"、"_BLE_"等

    是否可以尝试将第6行更改为以下内容?:

    deviceName = pTestDevice->getRfDevNameFromDevId(deviceId) + "_PROP";


    通过这些更改、我能够擦除闪存(尽管我尚未使用您的确切器件进行测试)

    此致、
    尼古拉伊

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

    您好  Nikolaj、

    很抱歉、但这没有帮助、我只是得到:

    Error: Device ID=XDS-FT4P4QFPA not found as connected to the RTL device.
    Either the device ID is not available, or the device ID must be connected to the RTL
    device with the `connect` method before performing any other operations

    即使我之前进行连接、我认为问题是、如果我在遇到调试接口被锁定的错误之前尝试连接、我应该使用闪存编程器2来擦除它。

    我已经尝试过 CC1312R 和 CC1311R3、并且 CC1312R 受闪存编程器2支持、我可以使用闪存编程器2擦除器件。  

     

    在我可以擦除锁定的设备之前,是否还有其它连接命令可用于这些设备?

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

    尊敬的 Martin:

    我认为无线电测试库不能用于在锁定的器件上执行批量擦除、您必须连接到目标方才能执行批量擦除。 您可以使用 UniFlash 执行整体擦除(请参阅 https://software-dl.ti.com/ccs/esd/uniflash/docs/v6_0/uniflash_quick_start_guide.html#cc13xx-cc26xx-mass-erase-from-cli)

    我再次建议您仅使用无线电测试库来检测器件、并使用 UniFlash 对器件进行编程/擦除。

    此致、
    尼古拉伊

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

    好的、这将解释问题。 不是正确的批量擦除。

    没有办法吗? Lib 看起来是基于闪存编程器2中使用的相同 DLL。

    我不太喜欢 Uniflash、因为我们在生产中使用了一些慢速平板电脑、而 Uniflash 非常慢、会产生大量线程、使其变得非常慢、  SRfflash 的性能要高得多。如果您不再支持它、最好更好地记录闪存库并具有与批量擦除相同的函数。

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

    您好!

    我们通常建议使用 UniFlash 进行闪存编程(和擦除)。 您已经指出了一些限制、我们感谢您的反馈。

    正如您还指出的、无线电测试库确实包含闪存编程器2使用的 DLL。 您可能能够直接使用 FPL (闪存编程器2使用的功能)、但这没有记录(也没有计划记录)。 我们通常不建议直接使用 FPL、但我在下面提供了一个可用于擦除闪存的示例。 这项工作未经过充分测试、如果您选择使用它、我们也无法提供大量支持。

    您需要将无线电测试库示例的主要功能替换为以下内容:

    #include <fpl_eb_device.h>
    
    int main(int argc, char *argv[])
    {
        pOut = std::make_unique< QTextStream >(stdout, QIODevice::WriteOnly);
    
    
        pTestDevice = new RTLDevice26_13xx();
    
        ebList = pTestDevice->enumerateEbs();
    
        deviceId = ebList.takeFirst();
        deviceName = pTestDevice->getRfDevNameFromDevId(deviceId);
    
    
    
        // Perform Mass Erase using FPL (works even if debug interface is locked)
        {
    
            FPLEbDevice::EbDescriptors ebDescs;
            int numberOfDevs = 0;
    
            // FPL Needs to enumerate the devices as well.
            FPLEbDevice::getDeviceList(&ebDescs, &numberOfDevs, FPLEbDevice::EnumLevel::EL_ALL_TYPES_AUTO_DETECT);
    
            // Find device in the list of devices enumerated by FPL
            FPLEbDevice::EbDescr eb;
            bool ebFound = false;
            for (const FPLEbDevice::EbDescr & ebTmp : ebDescs)
            {
                if (ebTmp.did == deviceId.toStdString())
                {
                    eb = ebTmp;
                    ebFound = true;
                    break;
                }
            }
    
            // Return error if device is not found
            if (!ebFound)
            {
                return (EXIT_FAILURE);
            }
    
            // Create FPL Target Device
            TargetInfo_t fplTargetInfo;
            FPLParams::InitTargetInfo(&fplTargetInfo);
    
            fplTargetInfo.csDid = eb.did;
            fplTargetInfo.csDeviceName = eb.rfDevName;
            fplTargetInfo.jtag2pin = true;
    
            FPLEbDevice * pEbDevice;
            FPLEbDevice::createEbDevice(&pEbDevice, fplTargetInfo);
            FPLTargetDevice * pFplTargetDev = pEbDevice->getTargetDevice();
    
            // Setup and perform mass erase
            parInfo_t eraseInfo;
            eraseInfo.type = EP_ERASE_ALL_FORCED;
    
            pFplTargetDev->eraseFlash(eraseInfo);
    
            //Clean-up
            delete pFplTargetDev;
    
        }
    
    
    
        DisconnectOnLeave disconnectGuard{ deviceId };
    
        // Connect to target
        int status = pTestDevice->connect(deviceName, deviceId);
        if (status != RTLDevice::TST_OK)
        {
            *pOut << status << "Initial connect failed!" << endl;
            printLastError(pTestDevice);
            return (EXIT_FAILURE);
        }
        return 0;
    }


    此致、
    尼古拉伊

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

    非常感谢、这很有用、真的很棒。  

    感谢您认真对待响应、并提供一些有用的示例代码。