如何使用u_dll.dll API进行固件下载和内存编程

⚠️
你好。。谢谢你来到论坛。令人兴奋的消息!我们现在正在迁移到新的论坛平台,该平台将提供更好的功能,并包含在主对话网站中。所有员额和帐户都已迁移。我们现在只接受新论坛的流量-请在//www.xmece.com/support. 我们将在未来几天内修复bug/优化搜索和标记。
7个员额/0个新员额
最后一篇文章
王路易2
离线
最后一次见到:2年10个月前
加入:2018-01-18 06:49
如何使用u_dll.dll API进行固件下载和内存编程

嗨,对话

您是否有显示如何使用u_dll.dll API(DA1458x_DA1468x_PLT_v_4.2.0.160)进行固件下载和内存编程的示例代码

我们正在尝试使用u_dll.dll API下载FW并擦除SPI闪存,

udll_set_prog_参数、udll_set_device_参数和udll_start_prog都成功返回,但不起作用。

*********

我们已经运行了udll_init()并添加了回调函数。但它仍然不起作用。

致以最崇高的敬意,
王路易

设备:
PM_对话框
离线
最后一次见到:2天7小时前
工作人员
加入:2018-02-08 11:03
你好,王路易,

你好,王路易,

建议在使用u_dll.dll库执行任何其他操作之前调用udll_init()函数,因为它会将某些内部结构设置为零。udll_start_prog()返回udll_成功消息并不意味着编程过程已经完成。为了找到进程所在的位置,应该检查在udll\u start\u prog()中调用的回调函数。然后,u_dll.dll将执行您的回调,以通知您的代码处于哪一点。

谢谢,下午好

王路易2
离线
最后一次见到:2年10个月前
加入:2018-01-18 06:49
嗨,对话

嗨,对话

谢谢你的回复。

您能帮我检查一下示例代码吗?我已经添加了回调,但没有工作。

//Test.cpp:定义控制台应用程序的入口点。
//

#包括“stdafx.h”
#包括“u_dll.h”
#包括
#包括“string.h”

使用名称空间std;

作废我的回调(uint32 com端口号、int状态、作废*数据、uint32数据长度);

int main(int argc,char*argv[])
{
int结果=1;
_udll_参数udll_参数;
_udll_设备_参数设备_参数;
//********************************************************
cout<<测试000开始:<<结束;
结果=udll_init();
不能<<结果<<结束;
//********************************************************
结果=1;
udll_params_t.dut_ic=U_dut_ic_DA14585;
udll_params_t.params_580.dut_ic=U_dut_ic_DA14585;
udll_参数t.params_580.baud_率=57600;
udll_params_t.params_580.mem.action=FW_荷载;
udll_params_t.params_580.mem.fw_load.action=fw_load;
udll_params_t.params_580.mem.fw_load.en=false;

字符串FW_路径(“E:\\DA1458x_DA1468x_PLT_v_4.2.0.160\\executables\\binaries\\flash_programmer_580.bin”);
strcpy_s(udll_params_t.params_580.mem.fw_load.fw_path,fw_path.c_str());

udll_params_t.params_580.mem.fw_load.uart_change_pins=false;
udll_params_t.params_580.mem.fw_load.uart_boot_pins=P04_P05;
udll_params_t.params_580.mem.fw_load.uart_pins.uart_port_tx=0;
udll_params_t.params_580.mem.fw_load.uart_pins.uart_pins_tx=4;
udll_params_t.params_580.mem.fw_load.uart_pins.uart_port_rx=0;
udll_params_t.params_580.mem.fw_load.uart_pins.uart_pins_rx=5;

结果=udll_集_程序参数(&udll_参数);
不能<<结果<<结束;
//********************************************************
结果=1;
设备参数处于活动状态=真;
设备参数t.dut\U num=U\U dut\U 1;
设备参数t.com端口引导=5;
设备参数t.com端口程序=5;
设备参数bd地址[bd地址大小]=uint8地址(0);
设备参数OTP客户字段数据[OTP客户字段大小]=uint8(0);
设备参数OTP客户字段大小=100;
设备参数xtal\u trim\u val[xtal\u trim\u SIZE]=uint8\u t(0);
设备参数adc校准值=0;
设备参数内存数据[最大内存数据大小]=uint8(0);
device_params_t.user_callback_udll=My_callback;

结果=udll\U set\U device\U params(&device\U params\t);
不能<<结果<<结束;

结果=udll_start_prog();
不能<<结果<<结束;
//********************************************************
结果=udll_close();
不能<<结果<<结束;
返回0;
}

无效我的回调(uint32通信端口号、int状态、无效*数据、uint32数据长度)
{
cout<<“test”<}

PM_对话框
离线
最后一次见到:2天7小时前
工作人员
加入:2018-02-08 11:03
你好,王路易,

你好,王路易,

附加的代码只是一个示例,用于检查如何刻录/擦除SPI闪存和下载固件,但未对其进行测试。有关更多详细信息,请参见PLT-DLL如何使用UDLL。更改测试时,应始终使用udll_set_prog_params函数,但如果没有特定于设备的更改,则可以跳过udll_set_device_params。

如果您使用多个设备,则必须对每个设备执行上述步骤。UDLL最多可以同时处理16个设备,但您必须为每个设备设置不同的回调和不同的检查。附加的代码仅适用于每次运行的单个设备。如果SPI闪存的GPIO引脚与默认引脚不同,则必须在每个SPI测试中设置配置,即使在上一个测试中已设置。建议对每个状态回调更改使用计时器。为了理解它是如何工作的,有一些有用的要点。

  • 所有操作启动(例如UDLL\U SPI\U ERASE\U START)回调将在调用UDLL\U START\U prog后立即出现。

  • 所有操作成功(例如UDLL\U SPI\U ERASE\U SUCCESS)回调将在测试完成后进行。这意味着(例如)擦除测试需要几秒钟才能完成,这取决于您的闪存。

  • FWU加载完成时间约为5-6秒。

谢谢,下午好

附件:
王路易2
离线
最后一次见到:2年10个月前
加入:2018-01-18 06:49
嗨,对话

嗨,对话

非常感谢你。

按照您的详细指导,我的代码现在可以工作了(擦除,将文件刻录到spi闪存)。

但是,有时,一些特殊的DUT在将FW刻录到DUT之前需要一个重置信号,如果使用smartsnippet工具箱,它会提示“按硬件重置按钮”。

通过使用u_dll API,如何知道DUT是否需要复位信号?

PM_对话框
离线
最后一次见到:2天7小时前
工作人员
加入:2018-02-08 11:03
你好,王路易,

你好,王路易,

我们有一个PLT板,控制所有程序的所有设备,并在需要时重置连接的设备。尽管如此,如果您没有PLT硬件,您可以在程序启动时按下重置按钮,直到UDLL_FW_DOWNLOAD_START回调函数点击为止。我建议您在前面附加的代码中添加以下消息,以便知道何时应按下并释放重置按钮。

第25行:cout<<“按住重置按钮”<

第111-112行:cout<<“释放重置按钮…”;

谢谢,下午好

王路易2
离线
最后一次见到:2年10个月前
加入:2018-01-18 06:49
嗨,对话

嗨,对话

谢谢,我会把它添加到我的代码中。