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

⚠️
大家好. .感谢来到论坛。令人兴奋的消息!我们现在正在转移到新的论坛平台的过程中,它将提供更好的功能,并包含在主对话网站。所有的帖子和账号已经迁移。我们现在只接受新论坛的流量-请发布任何新的帖子在//www.xmece.com/support.我们会在接下来的几天修复bug /优化搜索和标记。
7个员额/0个新员额
最后发表
路易王
离线
最后看到: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 flash,

Udll_set_prog_params、udll_set_device_params和udll_start_prog都返回成功,但不工作。

*********

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

最好的方面,
路易王

设备:
PM_Dialog
离线
最后看到:2天10小时前
工作人员
加入:2018-02-08 11:03
嗨,路易王,

嗨,路易王,

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

谢谢,PM_Dialog

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

嗨对话框

谢谢你的回复。

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

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

# include“stdafx.h”
# include“u_dll.h”
# include
# include“string.h”

使用名称空间std;

void My_CallBack(uint32_t com_port_number, int status, void *data, uint32_t data_len);

Int main(Int argc, char* argv[])

Int result = 1;
_udll_参数udll_参数;
_udll_设备_参数设备_参数;
//********************************************************
cout << "Test 000 start:" << endl;
结果= udll_init ();
Cout << result << endl;
//********************************************************
结果= 1;
udll_params_t。dut_ic = U_DUT_IC_DA14585;
udll_params_t.params_580。dut_ic = U_DUT_IC_DA14585;
udll_params_t.params_580。baud_rate = 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_Path(“E: \ \ DA1458x_DA1468x_PLT_v_4.2.0.160 \ \二进制文件可执行文件\ \ \ \ 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_pin_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_pin_rx = 5;

结果= udll_set_prog_params (&udll_params_t);
Cout << result << endl;
//********************************************************
结果= 1;
device_params_t。is_active = true;
device_params_t。dut_num = U_DUT_1;
device_params_t.com_port_boot = 5;
device_params_t.com_port_prog = 5;
device_params_t。bd_addr [BD_ADDR_SIZE] = uint8_t (0);
设备参数OTP客户字段数据[OTP客户字段大小]=uint8(0);
device_params_t.OTP_customer_field。大小= 100;
设备参数xtal\u trim\u val[xtal\u trim\u SIZE]=uint8\u t(0);
device_params_t。adc_calib_val = 0;
device_params_t。mem_data [MAX_MEM_DATA_SIZE] = uint8_t (0);
device_params_t。user_callback_udll = My_CallBack;

结果= udll_set_device_params (&device_params_t);
Cout << result << endl;

结果=udll_start_prog();
Cout << result << endl;
//********************************************************
结果=udll_close();
Cout << result << endl;
返回0;

无效我的回调(uint32通信端口号、int状态、无效*数据、uint32数据长度)

Cout << "test" << endl;

PM_Dialog
离线
最后看到:2天10小时前
工作人员
加入:2018-02-08 11:03
嗨,路易王,

嗨,路易王,

所附的代码只是一个样本,以检查您如何可以烧/擦除SPI flash和下载固件,但它没有测试。您可以查看PLT-DLL如何使用UDLL来了解更多细节。在更改测试时,应该始终使用udll_set_prog_params函数,但如果没有特定于设备的更改,可以跳过udll_set_device_params。

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

  • 所有动作_START(例如UDLL_SPI_ERASE_START)回调将在调用udll_start_prog之后立即出现。

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

  • FW_LOAD完成的时间大约为5-6秒。

谢谢,PM_Dialog

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

嗨对话框

非常感谢你。

遵循您的详细指导,我的代码可以工作(擦除,烧文件到spi flash)现在。

但是,有时一些特殊的DUT,在燃烧FW到DUT之前需要一个复位信号,如果使用智能片段工具箱,它会提示“按下硬件复位按钮”。

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

PM_Dialog
离线
最后看到:2天10小时前
工作人员
加入:2018-02-08 11:03
嗨,路易王,

嗨,路易王,

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

Line 25: cout << "Press and hold the reset button" << endl;

Line 111-112: cout << "释放复位按钮.."< < endl;

谢谢,PM_Dialog

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

嗨对话框

谢谢,我会把它加到我的密码里。