[主要文件说明]
JM_CMD.EXE				调用dll控制编程器的动作、监测编程器状态
JM_CMD_OP.bat			调用JM_CMD.EXE的批处理文件
JM_CMD_OP.TXT			由JM_CMD_OP.bat批处理生成，文件名可由批处理更改

[参数说明]
JMCMD 使用的JMO必须在JM3上,如果不在，先用DOWNLOAD命令下载到编程器中

1.BAUDRATE 
功能: 设置波特率 只有用串口连接编程器时有效  连接的缺省波特率为：115200
参数: 115200/230400/460800/500000/1000000
返回: 状态信息

2.CLOSEJMO JM_NO    
功能: 关闭打开的JMO文件，退出编程状态，返回监控态
参数: 编程器号，如果只连接一台编程器，就是1 
返回: 状态信息

3.CMD "FILENAME"
功能: 运行命令文件 
参数: "FILENAME"  FILENAME文件中是要执行的命令行
返回: 状态信息

4.COUNTER JM_NO
功能: 读取编程限定次数
参数: 编程器号
返回: 当前所剩余的编程次数

5. DELETE JM_NO, F_NO/0
功能: 删除编程器中的JMO文件
参数: JM_NO: 编程器号  F_NO: JMO文件序号  或  0: 用FID命令查找出的JMO文件序号
返回: 状态信息


6. DOWNLOAD JM_NO, TF/FLASH,"FILENAME"
功能: 下载JMO文件到编程器
参数: JM_NO: 编程器号  TF/FLASH指定要下载到的盘，TF表示下载到TF卡，FLASH表示下载到内部FLASH
返回: 状态信息

7. EXIT
功能: 退出命令行窗口 　在退出前会自动DISCONNECT已连接的编程器并LOGOFF关闭LOG文件
参数: 无
返回: EXIT前一条命令的状态信息

8. FID JM_NO, TF/FLASH,"FILENAME"
功能: 查找指定文件的文件序号
参数: JM_NO: 编程器号 TF/FLASH指定要查找的盘，TF表示TF卡，FLASH表示内部FLASH。"FILENAME"指令JMO文件名
返回: 查找文件对的文件序号。在OPENJMO,SETAUTOFILE,DELETE中可以使用FID来指定相应文件

9. FILE JM_NO, 0/F_NO
功能: 读取编程器中的JMO文件信息
参数: JM_NO: 编程器号   0: 读取编程器中JMO的文件个数  1..N: 显示文件序号指定JMO的信息
返回: 参数为0时返回编程器中JMO的文件个数，参数为1..N时返回文件序号指定JMO的信息
      DISK     : TF/FLASH  JMO文件是在TF卡还是内部FLASH盘
　　　FILENAME : JMO文件名
　　　DESCRIBE　: JMO文件描述
      CHKSUM   : JMO文件校验和
　　　DATETIME : 创建JMO文件的日期、时间
      CHIPTYPE : JMO文件中的芯片型号
      SERIAL   : Y/N  JMO文件中是否设置了编程串号
      AES      : Y/N  JMO文件中是否设置了加密密码
      PID      : Y/N  JMO文件中是否限定了编程器号
      COUNTER  : 剩余次数/总次数      0/0表示没有限定编程次数
      START    : KEY/AUTO/ATE 编程启动方式
      ATEM     : JMO文件中设定的ATE接口有效电平
      AUTOFILE : Y/N  JMO文件是不是自启动文件

10. FORMAT JM_NO
功能: 格式化编程器中的FLASH盘
参数: JM_NO: 编程器号 
返回: 状态信息

11. JM JM_NO
功能: 计算电恼连接的编程器台数/连接方式
参数: JM_NO: 编程器号 
返回: 当JMO=0时返回电脑连接的编程器台数
      当JMO=1..N时返回这台编程器的连接方式，0：表示未连接  1:表示编程器直接连接电闹  
      HB.LB: 高位表示通过编程器扩展板连接，高字节(HB)表示搞展板号,低字节(LB)表示扩展上编程器的序号

12. LASTERROR JM_NO
功能: 读编程器上一次操作的返回值
参数: JMNO: 编程器号 
返回: 上条命令的返回状态信息

13. HELP
功能: 显示常用命令的命令列表 
参数: 无
返回: 显示常用命令的命令列表

14. LOGOFF
功能: 关闭LOG文件 
参数: 无
返回: 状态信息

15. LOGON CREATE/APPEND, "FILENAME"
功能: 记录编程信息 
参数: CREATE: 创建一个新的名为"FILENAME"LOG文件   APPEND: 在原"FILENAME"LOG文件最后填加 
返回: 状态信息

16. MESSAGE JM_NO, 1/2/0
功能: 读取编程器进度信息
参数: JM_NO: 编程器号  1/2/0  指定编程口 1: P1   2: P2    0: P1 及 P2
返回: 当前进度信息，是一个32位的字。如果当前没有新的信息，就返回最近的一次信息
      // B3           B2            B1            B0
      // PNO          SPPEDBAR      ATE           STATUS
      // 1: P1口信息  进度条位置     NG,OK,BUSY    编程序所处状态
      // 2: P2口信息                               PROG_NULL到PROG_FINISH
　
17. MODE JM_NO
功能: 显示编程器当前所处状态
参数: JM_NO: 编程器号 
返回: 状态信息

18. NAME JM_NO
功能: 读取编程器名称 
参数: JM_NO: 编程器号 
返回: 编程器名称字符串

19. OPENJMO JM_NO, F_NO/0
功能: 打开JMO文件，进入编程状态
参数: JM_NO: 编程器号   F_NO: JMO文件序号   0: 由FID命令指定的JMO文件序号
返回: 状态信息

20. POWER JM_NO, 1/2/0，VCC
功能: 控制编程口的电源脚
参数: JM_NO: 编程器号  1/2/0: 编程器端口号  VCC: 电压值   0: OFF    3: 1.8V  4: 2.5V 5: 3.3V  6: 3.6V 7: 5.0V
返回: 状态信息

21. READIO JM_NO, 1/2, ADR
功能: 读取编程寄存器
参数: JMNO: 编程器号  1/2: 编程器端口号  ADR: 编程寄存器地址  0..15
返回: 指定编程端口号的指定寄存器值

22. RESET JM_NO
功能: 复位编程器，复位后编程器断开连接，需要使用时必须用CONNECT命令再次连接 
参数: JM_NO: 编程器号  
返回: 状态信息

23. RUN JM_NO, 1/2/0
功能: 执行一次编程，编程完成后返回 
参数: JM_NO: 编程器号  1/2/0  1: 编程端口1编程    2: 编程端口2编程      0: 编程端口1及编程端口1同时编程
返回: 状态信息

24. SERIAL JM_NO, 1/2/0, "STRING"HEX
功能: 设定外部串号的值
参数: JM_NO: 编程器号  1/2/0  1: 编程端口1   2: 编程端口2    0: 编程端口1及编程端口2
返回: 状态信息

25. SETAUTOFILE JM_NO, F_NO/0
功能: 设定自启动文件
参数: JM_NO: 编程器号  F_NO: JMO文件序号, 当F_NO为0时表示取消自启动文件   0: 由FID命令指定的JMO文件序号
返回: 状态信息

26. SETNAME JM_NO,"NAME"
功能: 设定编程器名称
参数: JM_NO: 编程器号  "NAME": 编程器名称
返回: 状态信息

27. SETPASSWORD JM_NO, "PASSWORD"
功能: 设定编程器密码
参数: JM_NO: 编程器号  "PASSWORD": 编程器密码
返回: 状态信息

28. SNO JM_NO
功能: 读取编程器编号 
参数: JM_NO: 编程器号 
返回: 编程器编号

function JMU_VERSION(JMNO: u32)                           : u32    ; cdecl; external DLLU_NAME name 'JM_VERSION'    ;
function JMU_WRITEIO(JMNO: u32; P: u32; A: u32; D: u32)   : u32    ; cdecl; external DLLU_NAME name 'JM_WRITEIO'    ;
function JMU_WRITELOG(p: pointer)                         : u32    ; cdecl; external DLLU_NAME name 'JM_WRITELOG'   ;
29. START JM_NO, 1/2/0
功能: 启动编程，启动后不等待编程结束立即返回。需要用MESSAGE命令判断编程是否完成
参数: JM_NO: 编程器号   1/2/0  1: 编程端口1编程    2: 编程端口2编程      0: 编程端口1及编程端口1同时编程 
返回: 状态信息

30. VERSION JM_NO
功能: 读取编程器软件版本号 
参数: JM_NO: 编程器号
返回: 编程器软件版本号

31. WRITEIO JM_NO, 1/2/0, ADR, DAT
功能: 设置编程寄存器
参数: JM_NO: 编程器号   1/2/0: 编程器端口号  ADR: 编程寄存器地址  0..15    DAT: 待写数据 
返回: 状态信息

32. PORT  USB/COM
功能: 选择软件与编程器的连接方式  缺省方式是USB
参数: USB: USB口接连    COM: 串口连接
返回: 状态信息

　// 编程器上电后处于监控态，如果编程器有自启动文件，编程器上电后自动打开JMO文件，进入编程态。
  // 出错不影响编程器的状态。可以用MODE命令查看当前状态。

  // 状态转换　只有下面两条命令会改变所处编程器状态
  OPENJMO  将编程器从监控态转为编程态
  CLOSEJMO 将编程器从编程态转为监控态


  // 命令执行时的状态要求
  // 以下命令必须在监控态执行
  DELETE
  DOWNLOAD
  FID
  FILE
  NAME
  OPENJMO
  SETAUTOFILE
  SETNAME
  SETPASSWORD
  SNO
  VERSION

  // 以下命令必须在编程态执行
  CLOSEJMO
  COUNTER
  MESSAGE
  POWER
  READIO
  SERIAL
  RUN  
  START
  WRITEIO


  // 状态信息定义
  OK                     =  0;    // 运行正常，没有错误
                               // 下面1-10为编程器上电自检错误信息
  ERROR_MONI             =  1;    // 编程器监控程序错误    
  ERROR_ALGO             =  2;    // 编程器编程算法错误
  ERROR_RTC              =  3;    // 编程器中的实时时钟错误，通常是电池没电了
  ERROR_FLASH_FORMAT     =  4;    // 内部FLASH格式错误，需要重新格式化
  ERROR_FLASH_TF         =  5;    // TF卡错误
  ERROR_FPGA_ID	         =  6;    // 编程器中的FPGA ID错误
  ERROR_FPGA_CFG         =  7;    // 编程器中的FPGA配置错误
  ERROR_FPGA_IP          =  8;    // 编程器中的FPGA IP码错误
  ERROR_FLASH_ID         =  9;    // 编程器中的FLASH ID错误
  ERROR_FLASH_CFG        = 10;    // 编程器中的FLASH 配置错误
                               // 下面20-24为打开JMO的错误信息   
  ERROR_CHIPTYPE         = 20;    // 芯片类型错误
  ERROR_PROGID           = 21;    // JMO限定了编程器编号，现在连接的编程序器编号不在允许列表中
  ERROR_COUNTER          = 22;    // JMO限定了编程记数, 现在剩余编程记数为0
  ERROR_AES              = 23;    // JMO设定了加密，现在编程器中的密码不对
  ERROR_CHKSUM           = 24;    // JMO的CHKSUM不对
                               // 下面31-63为编程器当前的工作状态
  PROG_NULL              = 31;    // 编程器空闲
  PROG_WAIT_KEY          = 32;    // 编程器在等待用户按键启动编程
  PROG_AUTO              = 33;    // 编程器在等待用户连接芯片
  PROG_TEST_PIN          = 34;    // 编程器在编程完毕，用户可以用plugin程序测试芯片
  PROG_CONNECT           = 35;    // 编程器在连接芯片
  PROG_RESTORE           = 36;    // 编程器在恢复芯片
  PROG_ERASE             = 37;    // 编程器在擦除芯片
  PROG_WRITE             = 38;    // 编程器在编程芯片
  PROG_READ              = 39;    // 编程器在读芯片
  PROG_VERIFY            = 40;    // 编程器在校验芯片
  PROG_PROTECT           = 41;    // 编程器在编程加密信息
  PROG_UNPROTECT         = 42;    // 编程器在解除芯片加密
  PROG_BLANKCHECK        = 43;    // 编程器在做空片检查
  PROG_CTRL              = 44;    // 编程器在CTRL
  PROG_EPROM             = 45;    // 编程器在编程EPROM或OTP
  PROG_BOOTLOAD          = 46;    // 编程器在编程BOOTLOAD
  PROG_ATE               = 47;    // 编程器在等待ATE接口的START信号
  PROG_SVF               = 48;  // 下面48-57用于JTAG口编程
  PROG_IDCODE            = 49;    // 编程器在执行IDCODE
  PROG_CHECK_OPT         = 50;    // 编程器在执行CHECK_OPT
  PROG_PIO               = 51;    // 编程器在执行PIO
  PROG_WRITE_OPT         = 52;    // 编程器在执行WRITE_OPT
  PROG_READ_OPT          = 53;    // 编程器在执行READ_OPT
  PROG_TEST              = 54;    // 编程器在执行TEST
  PROG_USER_ID0          = 55;    // 编程器在执行USER_ID0
  PROG_USER_ID1          = 56;    // 编程器在执行USER_ID1
  PROG_USER_ID2          = 57;    // 编程器在执行USER_ID2
  PROG_EXECUTE           = 58;    // 编程器在运行芯片中的程序
  PROG_JMO_NO            = 59;    // 编程器在执行多JMO合并中的一个JMO
  PROG_DOWNLOAD          = 60;    // 编程器在下载编程程序
  PROG_POWERON           = 61;    // 编程器在上电
  PROG_POWEROFF          = 62;    // 编程器在下电
  PROG_FINISH            = 63;    // 编程器完成工作
                               // 70-79是命令执行过程中的错误信息　　　　
  ERROR_CONNECT          = 70;    // 连接编程器错误
  ERROR_PARAMETER        = 71;    // 命令的参数不对
  ERROR_FILE_NOT_FOUND   = 72;    // 文件未找到
  ERROR_READ_FILE        = 73;    // 文件读错误
  ERROR_WRITE_FILE       = 74;    // 文件写错误
  ERROR_TOO_MANY_COMMAND = 75;    // 命令行太多（最多1024行，超过了可以放在不同的文件中用CMD命令调用）
  ERROR_UNKNOWN_COMMAND  = 76;    // 命令错
  ERROR_JMO_FILE         = 77;    // JMO文件错
  ERROR_JMO_DOWNLOAD     = 78;    // JMO文件下载错
  ERROR_UNKNOWN          = 79;    // 未知错误
                                // 80-81为编程器状态
  MODE_MONITOR           = 80;    // 编程器在监控态
  MODE_PROGRAM           = 81;    // 编程器在编程态


