主题中讨论的其他部件:CC1310、 UNIFLASH、 CC1312R
您好!
我们正在对不同的器件 CC1310和 CC1312进行编程、但现在我想检测在控制台级别连接的器件。 对于闪存编程器2、有一个选项
-ls auto
Uniflash 是否有类似的东西?
我找到的唯一工具是列出已连接的编程器、但这不是我需要的。
此致、
Martin
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和 CC1312进行编程、但现在我想检测在控制台级别连接的器件。 对于闪存编程器2、有一个选项
-ls auto
Uniflash 是否有类似的东西?
我找到的唯一工具是列出已连接的编程器、但这不是我需要的。
此致、
Martin
https://software-dl.ti.com/ccs/esd/uniflash/docs/v6_2/uniflash_quick_start_guide.html
您是否能够使用本页中描述的"CLI 设备检测器"?
好的、好得知道、由于闪存编程器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、但我不确定地址。
例如、检测连接的器件时、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:
您可以使用与 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更新的版本?
好的、很好知道、但由于示例和文档中未提及这些器件、器件名称 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); }
此致、
尼古拉伊
也许并非所有文件都包含在库中、在线文档中提到了一个文件 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 对器件进行编程/擦除。
此致、
尼古拉伊
您好!
我们通常建议使用 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; }
此致、
尼古拉伊