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

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

嗨,路易王,

It is recommended to call the udll_init() function before any other operation with the u_dll.dll library, because it sets to zero some internal structures.The fact that the udll_start_prog() returns UDLL_SUCCESS messages doesn’t mean that the process of the programming is already finished. In order to find where the process is, you should check the callback function that you call in the udll_start_prog(). Then, the u_dll.dll will execute your callback in order to inform you in which point your code is.

谢谢,PM_Dialog

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

嗨对话框

感谢您的回复。

您有帮助查看我的示例代码吗?l已添加回调但不起作用。

// 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_params udll_params_t;
_udll_device_params device_params_t;
//********************************************************
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_load;
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);
device_params_t.otp_customer_field.data [otp_585_customer_field_size] = uint8_t(0);
device_params_t.OTP_customer_field。大小= 100;
device_params_t.xtal_trim_val [xtal_trim_size] = uint8_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;

void my_callback(uint32_t com_port_number,int status,void * data,uint32_t data_len)

Cout << "test" << endl;

PM_Dialog
离线
最后看到:2周2天前
工作人员
加入: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之后立即出现。

  • 完成测试后,所有操作_success(例如UDLL_SPI_ERASE_SUCCESS)回调将是回调。这意味着(例如)擦除测试将需要几秒钟即可完成,这取决于闪存。

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

谢谢,PM_Dialog

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

嗨对话框

太感谢了。

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

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

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

PM_Dialog
离线
最后看到:2周2天前
工作人员
加入: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

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

嗨对话框

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