原创 Versaloon脚本界面--不仅仅是编程器

2010-8-3 05:40 2290 10 10 分类: MCU/ 嵌入式

vprog构架上,目前完全基于脚本,以前main函数中的一大堆代码都没有了,编程代码变成简单的:


if (ERROR_OK != misc_run_script("operate"))
  {
   free_all_and_exit(EXIT_FAILURE);
  }


执行一个脚本而已。


并且,使用vsprog -V"script",可以运行单一脚本。


通过使用run命令,可以运行一个文本文件中的脚本,目前,这个功能在我这里主要用于测试我的一个基于IIC接口的方法。


 


一个简单的脚本运用举例:


test_script.vts -- vts == Versaloon test script,和vbs == Versaloon binary script对应。


param exit_on_fail 1


iic_init 100 20000


gpio_init 1 0 1


log_info "Press any key to run test..."


getchar


loop 10000


xxxx_transact xx xx xx xx    ----    自定义命令,用于测试自己的方案,测试10000次


iic_fini


gpio_fini


 


并且,可以在脚本中,加入芯片的删除下载校验等功能,下载完程序后,马上执行后续的测试脚本:


s avr8             -- 相当于命令行中的-savr8


I test.hex        -- 相当于命令行中的-Itest.hex


o e                  -- 相当于命令行中的-oe


o wf                -- 相当于命令行中的-owf


o vf                 -- 相当于命令行中的-ovf


operate         -- 执行编程操作


run test.vts quiet   -- 运行测试脚本,quiet表明,只显示结果,不显示脚本中的每条具体的命令


 


有些方案,需要下载2次程序,第一次是类似加密的程序,可能通过芯片序列号,计算出一个密钥:


s stm32


I encrypt.hex


o e


o wf


o vf


operate


free-all


sleep 100


xxx_read_encrypt    --- 用户定义命令,用于读取密钥(通过ADIv5接口,读取指定内存的数据),下面的命令就是第二次下载应用固件


s stm32


I application.hex


o e


o wf


o vf


operate


 


目前,Versaloon的应用,就看你怎么写脚本了。


并且,在以后的Versaloon硬件中,会集成一定的存储功能,用于存放vbs,也就是二进制的脚本,相当于离线执行的功能,当然,编程和测试都可以支持。


 


命令列表:


param    ----    设置参数,exit_on_fail(错误时自动退出)和no_commit(输入发送命令后,不执行,在收到commit命令或者读取命令时才执行,只对编程器提供的各个接口命令有效)


misc-help    ----    显示帮助,可以增加一个参数,为需要显示帮助的命令


shell    ----    新开一个shell,shell在堆栈上嵌套


run    ----    运行脚本文件,可以在文件,名后增加“quiet”,脚本文件内的执行命令不显示,只显示执行结果


loop    ----    指定下一条命令的执行次数


exit    ----    退出当前shell


close    ----    退出当前程序


V/misc-cmd    ----    运行脚本命令,命令行中的-V参数,就是用这个脚本解析的


log_info    ----    显示指定信息,如果信息里有空格,需要再两边加上引号


getchar    ----    等待用户输入任意按键


h/help    ----    命令行中的-h参数,用此脚本解析,这个是显示vsprog的help信息,和misc-help有区别


v/version    ----    命令行中的-v参数,用此脚本解析


d/debug    ----    命令行中的-d参数,用此脚本解析


S/support     ----    命令行中的-S参数,用此脚本解析


o/operation    ----    命令行中的-o参数,用此脚本解析


Z/firmware-update    ----    命令行中的-Z参数,用此脚本解析


free-all    ----    清空原先为了执行下载操作所分配的所有资源,之后就可以准备下一个下载操作


init    ----    vsprog初始化是自动调用,用户无需调用


D/memory-detail    ----    命令行中的-D参数,用此脚本解析


P/parameter    ----    命令行中的-P参数,用此脚本解析


s/target-series    ----    命令行中的-s参数,用此脚本解析


c/target-chip    ----    命令行中的-c参数,用此脚本解析


t/target    ----    命令行中的-t参数,用此脚本解析


F/frequency    ----    命令行中的-F参数,用此脚本解析


K/kernel-khz    ----    命令行中的-K参数,用此脚本解析


W/wait-state    ----    命令行中的-W参数,用此脚本解析


A/auto-adjust    ----    命令行中的-A参数,用此脚本解析


J/jtag-dc    ----    命令行中的-J参数,用此脚本解析


m/mode    ----    命令行中的-m参数,用此脚本解析


operate    ----    执行设置的编程操作


X/execute    ----    命令行中的-X参数,用此脚本解析


G/gui-mode    ----    命令行中的-G参数,用此脚本解析


I/input-file    ----    命令行中的-I参数,用此脚本解析


O/output-file    ----    命令行中的-O参数,用此脚本解析


L/display-programmer    ----    命令行中的-L参数,用此脚本解析


p/programmer    ----    命令行中的-p参数,用此脚本解析,如果该命令无参数,则使用系统默认编程器,如果该编程器以初始化,会调用终止化程序,并重新初始化


C/comport    ----    命令行中的-C参数,用此脚本解析,指定串口和参数,串口ISP使用


U/usb    ----    命令行中的-U参数,用此脚本解析,指定USB接口参数


一下是编程器各个接口的命令:


get_tvcc    ----    读取目标VCC电压


set_tvcc    ----    设置目标VCC电压


gpio_init    ----    GPIO模块初始化


gpio_fini    ----    GPIO模块终止化


gpio_config    ----    GPIO模块设置(输入输出,上拉下拉)


gpio_out    ----    输出


gpio_in    ----    输入


spi_init    ----    SPI模块初始化


spi_fini    ----    SPI模块终止化


spi_config    ----    SPI模块配置,clock,cpha,cpol


spi_io    ----    SPI模块读写


iic_init    ----    IIC模块初始化


iic_fini    ----    IIC模块终止化


iic_config    ----    IIC模块配置,频率,最大超时


iic_read    ----    IIC读操作


iic_write    ----    IIC写操作


delayus    ----    编程器us延时


delayms    ----    编程器ms延时


commit    ----    执行编程器的接口操作


 


用户可以增加自己指定的命令,不过这个就要写代码了,比如:


MISC_HANDLER(user_run);


struct misc_cmd_t user_cmd[] =


{


 MISC_CMD( "user_run",


    "run user defined operation, format: user_run",


    user_run),


 MISC_CMD_END


};


MISC_HANDLER(user_run)


{


    struct programmer_info_t *prog;


    // 如果本命令,需要使用到编程器的功能,需要先确认编程器可用


    // 如果programmer_assert返回ERROR_OK,则后续的代码可以通过prog直接调用各个接口操作


    if (ERROR_OK != programmer_assert(&prog))


    {


        LOG_INFO("programmer not inited");


        return ERROR_FAIL;


    }


    // 这里可以通过prog->interfaces来调用各个接口定义的操作


    // 当然,也可以调用其他模块,比如ADIv5的ARM调试接口,或者调用cortex_m3的接口


    // 要执行其他脚本的话,也可以运行misc_run_script("bla bla bla");


    // 操作成功,返回ERROR_OK,否则,返回ERROR_FAIL


    return ERROR_OK;


}


然后在scripts.c文件的misc_cmds_list结构中,增加user_cmd即可。

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
10
关闭 站长推荐上一条 /3 下一条