嗨对话框
您是否有示例代码显示如何使用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()并添加了回调函数。但它仍然不起作用。
最好的方面,
路易王
设备:
嗨,路易王,
建议在使用u_dll.dll库执行任何其他操作之前调用udll_init()函数,因为它会将某些内部结构设置为零。udll_start_prog()返回udll_成功消息并不意味着编程过程已经完成。为了找到进程所在的位置,应该检查在udll\u start\u prog()中调用的回调函数。然后,u_dll.dll将执行您的回调,以通知您的代码处于哪一点。
谢谢,PM_Dialog
嗨对话框
谢谢你的回复。
您能帮我检查一下示例代码吗?我已经添加了回调,但没有工作。
//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;
}
嗨,路易王,
所附的代码只是一个样本,以检查您如何可以烧/擦除SPI flash和下载固件,但它没有测试。您可以查看PLT-DLL如何使用UDLL来了解更多细节。在更改测试时,应该始终使用udll_set_prog_params函数,但如果没有特定于设备的更改,可以跳过udll_set_device_params。
如果您使用多个设备,则必须对每个设备执行上述程序。UDLL可以同时处理多达16个设备,但是您必须为每个设备设置不同的回调和不同的检查。所附的代码仅适用于每次运行的单个设备。如果你有SPI flash在不同的GPIO引脚比默认的,你将不得不在每个SPI测试中设置配置,即使你已经设置了它在前一个。建议对每次状态回调更改使用计时器。为了理解它是如何工作的,一些有用的要点。
谢谢,PM_Dialog
嗨对话框
非常感谢你。
遵循您的详细指导,我的代码可以工作(擦除,烧文件到spi flash)现在。
但是,有时一些特殊的DUT,在燃烧FW到DUT之前需要一个复位信号,如果使用智能片段工具箱,它会提示“按下硬件复位按钮”。
通过使用u_dll API,如何知道DUT是否需要复位信号?
嗨,路易王,
我们有一个PLT板,控制所有程序的所有设备,并在需要时重置连接的设备。尽管如此,如果您没有PLT硬件,您可以在程序启动时按下重置按钮,直到UDLL_FW_DOWNLOAD_START回调函数点击为止。我建议您在前面附加的代码中添加以下消息,以便知道何时应按下并释放重置按钮。
Line 25: cout << "Press and hold the reset button" << endl;
Line 111-112: cout << "释放复位按钮.."< < endl;
谢谢,PM_Dialog
嗨对话框
谢谢,我会把它加到我的密码里。