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