iTuner 使用说明


简单介绍

欢迎并感谢小伙伴使用这个小软件,如有任何疑问或改进建议,欢迎留言,同时也声明一下俺是业余的,使用过程中遇到任何bug如软件异常退出等,纯属正常现象,烦请口下留情。
下载地址: https://gitee.com/xarm/iTuner

  1. 它的主要目的:
    主要为了远离外接I2C的烦恼通过SWD直接访问内存的方式实现CapSense的调试。
  2. 主要目标芯片:
    PSoC4:4014、4025、4126、4148等触摸芯片,其他的未测试。
  3. CapSense组件版本:
    7.10版本,象4.0等老版本,CapSense_dsRam结构体与目前的不一致,所以不兼容老版本。
    并且目前只支持按键,不支持滑条、touchpad等,那些的调试还是老老实实的使用官方的Tuner软件吧。
  4. 参考文档:
    Infineon-KitProg3_User_Guide-UserManual-v17_00-EN.pdf

目前已知问题

  1. 驱动
    MiniProg4puls在设备管理器中识别为三个USB设备,MiniProg4 USB-UART、Cypress MiniProg4(CMSIS-DAP)和MiniProg4 bridge,其中后两个设备驱动都是winusb,在某些系统中有时会无法正确识别,可参考Kitprog3_User_Guide - 7 - Troubleshooting中提到的方法尝试解决。或者在设备管理器中针对未正确驱动的MiniProg4 USB-UART和Cypress MiniProg4(CMSIS-DAP)设备使用附件中的驱动更新。 - - MiniProg4 Driver
    在某些情况下Miniprog4 bridge未被正确驱动,也参考Kitprog3_User_Guide 第7章的内容从Microsoft下载winusb驱动更新。 - - winusb Driver
    如果在BCP中还是未被正确识别,可卸载并删除 - 通用串行总线控制器 - USB Composite Device, 通过查看硬件ID确认VID_04B4 & PID_F151的usb复合设备的驱动试试,如果还是不能正确识别那就换电脑吧~

  2. 对外供电
    MiniProg4plus可对目标板供电,供电电压可通过内部跳线选择3.3V或5V,通过控制负载开关芯片MT9700实现对外供电,并且限制输出电流大小,如果电流过载会切断输出。目前限制输出为200mA,可通过更换限流电阻(板上鲨鱼嘴巴下面的那颗电阻)的大小调整限流: ISet(A) = 6.8(KΩ) / RSet(KΩ)
    11.3KΩ - 600mA , 8.45KΩ - 800mA , 6.8KΩ - 1000mA , 4.53KΩ - 1500mA
    !!! Note !!!
    此电压是对外输出电压,对目标板供电电压,如果目标板独立供电,可不连VT,如果目标板独立供电并连接VT,此时如果设置为Power cycle模式,或者设置为3.3V而目标板供电5V,都将会烧毁MT9700芯片!!!

  3. 其他
    软件有异常退出的情况,这俺也不晓得咋回事。。。

iTuner 介绍及设备连接

iTuner使用QT开发,纯绿色无依赖,解压即可运行,安全无毒,放心使用,针对不同情况可支持SWD、I2C、ELF三种方式连接。下面将分别介绍,开始之前先了解下其配置文件 - keyIniCfg.ini的配置说明。

配置文件

[CapSense]
TotalKey=5        //总共有多少个触摸按键
I2CAddress=0x51        //EZI2C的地址,I2C连接时使用
RamAddress=0x20000124    //缓冲区在内存中的地址,SWD模式使用
readBytes=28    //从缓冲区中读取的字节数
readBufName=keyStaBuf    //缓冲区在程序中的名称,可自动查询
[USB]    
VID = 0x04B4    //Miniprog4 VID&PID , 自动识别识别插入和拔出
PID = 0xF151    
[kStatus]
kStatusH=1        //缓冲区中按键状态高字节
kStatusL=2        //缓冲区中按键状态低字节
[K0]
RawCountH=5        //K0 RowCount H在缓冲区中的位置
RawCountL=6        //K0 RowCount L在缓冲区中的位置
BaseLineH=7        //K0 BaseLine H在缓冲区中的位置
BaseLineL=8        //K0 BaseLine L在缓冲区中的位置
[K1]
...

配置文件是需要根据实际情况首先配置,根据CapSense组件中Button的个数配置TotalKey的数值,(如果添加了dummp建,则不算),其他配置字段根据不同模式分别说明。

初识

编辑好配置文件后,打开iTuner.exe软件,连接好硬件后开始接下来的操作。 软件界面如下图示:
iTuner Connect
有SWD、I2C、和ELF三种连接方式,如果使用swd和elf方式,则一般情况下需要依次点击左上方的三个图标: Connect、Power、Get IDCODE。如果是I2C模式也需要点击Connect,识别出MiniProg4 CMSIS-DAP的设备信息。先以I2C和SWD为例。

I2C & SWD

I2C和SWD的操作方式是一样的,所不同的是物理连接的不同,I2C依赖配置文件中的I2CAddress,SWD依赖配置文件中的RamAddress,所实现的方式都是一致的,主要针对4014等芯片,处理完CapSense扫描后将数据更新至keyStaBuf中,等待主机读取。参考如下程序:

uint8_t keyStaBuf[BUFFER_SIZE] = {0};
void capsense_task()
{
    if(tmr10msFlag == false)   return;
    tmr10msFlag = false;

    CapSense_ScanAllWidgets();
    while(CapSense_NOT_BUSY != CapSense_IsBusy()) {
        //CySysPmSleep();
    }
    CapSense_ProcessAllWidgets();
    keyStatus = CapSense_WDGT_STATUS0_VALUE;
    updateKeystatusBuffer(keyStatus);    //update key buffer
}
void updateKeystatusBuffer(uint16_t keySta)
{
    uint8_t j;

    if(keySta)  keyStaBuf[0] = 0xF0;            //无按键按下
    else    keyStaBuf[0] = 0xF1;                //有按键按下

    keyStaBuf[1] = (keySta>>8)&0xff;            
    keyStaBuf[2] = (keySta)&0xff;               
    keyStaBuf[3] = keyStaBuf[0]+keyStaBuf[1]+keyStaBuf[2];    //和校验位
    keyStaBuf[4] = 0xFD;                        //结尾

    j=5;

#if (KEY_NUMS >= 1) 
    keyStaBuf[j++] = (CapSense_KEY1_SNS0_RAW0_VALUE>>8)&0xff;      
    keyStaBuf[j++] = CapSense_KEY1_SNS0_RAW0_VALUE&0xff;           
    keyStaBuf[j++] = (CapSense_KEY1_SNS0_BSLN0_VALUE>>8)&0xff;      
    keyStaBuf[j++] = CapSense_KEY1_SNS0_BSLN0_VALUE&0xff;           
#endif    
#if (KEY_NUMS >= 2) 
    keyStaBuf[j++] = (CapSense_KEY2_SNS0_RAW0_VALUE>>8)&0xff;      
    keyStaBuf[j++] = CapSense_KEY2_SNS0_RAW0_VALUE&0xff;           
    keyStaBuf[j++] = (CapSense_KEY2_SNS0_BSLN0_VALUE>>8)&0xff;      
    keyStaBuf[j++] = CapSense_KEY2_SNS0_BSLN0_VALUE&0xff;           
#endif  
#if (KEY_NUMS >= 3) 
    keyStaBuf[j++] = (CapSense_KEY3_SNS0_RAW0_VALUE>>8)&0xff;      
    keyStaBuf[j++] = CapSense_KEY3_SNS0_RAW0_VALUE&0xff;            
    keyStaBuf[j++] = (CapSense_KEY3_SNS0_BSLN0_VALUE>>8)&0xff;       
    keyStaBuf[j++] = CapSense_KEY3_SNS0_BSLN0_VALUE&0xff;            
#endif  
#if (KEY_NUMS >= 4) 
    keyStaBuf[j++] = (CapSense_KEY4_SNS0_RAW0_VALUE>>8)&0xff;       
    keyStaBuf[j++] = CapSense_KEY4_SNS0_RAW0_VALUE&0xff;            
    keyStaBuf[j++] = (CapSense_KEY4_SNS0_BSLN0_VALUE>>8)&0xff;       
    keyStaBuf[j++] = CapSense_KEY4_SNS0_BSLN0_VALUE&0xff;            
#endif  
#if (KEY_NUMS >= 5) 
    keyStaBuf[j++] = (CapSense_KEY5_SNS0_RAW0_VALUE>>8)&0xff;       
    keyStaBuf[j++] = CapSense_KEY5_SNS0_RAW0_VALUE&0xff;            
    keyStaBuf[j++] = (CapSense_KEY5_SNS0_BSLN0_VALUE>>8)&0xff;       
    keyStaBuf[j++] = CapSense_KEY5_SNS0_BSLN0_VALUE&0xff;            
#endif  
}

如果使用I2C连接,只需要注意配置文件中I2C地址是否正确即可。如果是SWD,需要keyStaBuf的地址,可查看编译后的map文件,也或者通过打开elf文件解析,如果配置不一致,会有提示:
iTunerBufferError
不一致 可通过修改ini配置文件,或者通过命令行模式修改都可。

ELF

ELF 模式是通过解析编译生成的elf文件,从中解析出CapSense_dsRam的数据结构及地址,然后通过SWD直接访问该地址的数据并解析显示。类似于JLink的JScope模式,相比于I2C和SWD模式来说,更直接更粗暴。同时也可以手动修改地址,或添加、删除某个按键。
ELF

!!!Note: 这种模式仍需要配置ini中的TotalKey值。

iBridge I2C

在某些电脑上,Bridge Control panel 无法正确识别MiniProg4,所以就将USB转I2C功能通过CMSIS-DAP的扩展协议实现了,实际操作如BCP的操作一样:

w 51 3 AA BB p
w 51 0
r 51 6 p

用于测试I2C的读写还是比较方便的。

其他功能

  1. 程序下载:走openocd协议,测试4127下载正常,但是4014无法正常下载!这个与官方的Cypress Programmer 4.2一样的。即使设置为Power Cycle模式也不行。。。
  2. 其他等以后再补充吧。

欢迎留言提出其他功能,只有电工才更懂电工的需求,感谢~


文章作者: xArm
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 xArm !
评论
  目录