为XELTEK SuperPro 6100编程器创建软件模块

前言


在上一篇文章中 ,考虑了XELTEK SuperPro 6100编程器针对克隆的保护机制。

本文将介绍为该程序员创建自己的软件模块的过程,通过对代码进行一定的修改,可以使其适合于与任何其他类型的微电路配合使用-目前尚不支持,或者就我们而言,只是正式声明。

背景知识


再次,我们的任务是乍看之下很简单地解决了-必须复制一个专用闪存芯片-mDOC H3 SDED5-512M。

该芯片是十多年前开发的。 这是pdf (1)及其说明。 以下是俄语声明的简短摘录:

... msystems已准备好将mDOC系列用作固态驱动器...
内置的TrueFFS软件负责管理mDOC H3闪存,运行其自己的控制器模块,该模块将其转变为一个完整的独立单元,可轻松添加到各种手持设备中。

在程序员支持的SuperPro 6100列表中,列出了这种芯片,甚至找到了相应的DX5057适配器。 但是在组装了整个设计人员并选择了该芯片之后,该程序显示了下图,其中包含神秘的项目“ DimageMain”,该描述在文档或开发人员的网站上均未找到。


尝试在适配器中没有芯片的情况下执行“ DimageMain”操作,收到有关其不存在的警告,并且在确认这一事实之后,程序显示以下信息:


从铭文“ mDOC H3 Write Image”判断,“ Image”是可以使用该编程器写入芯片的图像。 但是,如何从已经记录的微电路中读取该图像,如何擦除它,等等?

不久之后,我在Internet上找到了Dataman公司的文件(2) ,该文件部分显示了上述图像的结构,并提及了用于创建该图像的软件。
因此,进一步的努力旨在从文档TrueFFS 7.1 (3)的软件实用程序中描述的M-Systems中搜索实用程序。

以前的“ M-Systems”(现为“ SanDisk”)对技术支持的要求没有得出结果-根本没有答案。

在Internet上,可能只能找到不支持H3芯片版本的旧实用程序。 还没有找到SanDisk的完整SDK,仅是实现Linux驱动程序方面的“碎片” (5)

当我们研究累积的信息时,以下行引起了Dataman文件的注意:“可以使用SanDisk Docshell实用程序或PG4UW创建图像文件。”

SanDisk Docshell实用程序没有任何发现,因此我不得不弄清楚PG4UW (4)如何与此芯片一起工作。 他们没有将整个SanDisk SDK嵌入其软件中,而是创建了一个具有TrueFFS实用程序正常工作所必需的导出方法的插件,然后从其程序中对其进行调用。
我们将以同样的方式。

创建自己的软件模块


这里是免责声明,即作者对您对本文的任何使用不承担任何责任。
换句话说,只有您自己才能为自己的行为负责,我们可能会鼓励您熟悉本材料。

与上一篇文章一样,我们同意将SuperPro 6100的程序员称为“软件”,并且该程序所在的计算机为“主机”。 现在,我们有另一个程序可以在程序员本身中运行。 我们将其称为“软件模块”。

TrueFFS 7.1软件实用程序手册(3)描述了DOCSHELL实用程序实现的功能,该功能分为以下四类:

  • DFORMAT-用于格式化mDOC设备的实用程序。
  • DINFO-用于获取有关mDOC设备及其上现有部分的各种信息的实用程序。
  • DIMAGE-用于读取,写入和比较图像mDOC设备的实用程序。
  • SPLITIMAGE-用于将mDOC设备映像划分为多个部分的实用程序。

DOCSHELL实用程序用于命令行,因此,使用相同的文本命令机制实现了与DOCSHELL.dll插件进行通信的接口。
在开始与“ DOCSHELL.dll”的通信之前,必须调用每个导出的方法,并将它们中指向软件中实现的功能的指针传递给它们,以便与mDOC芯片进行物理交换。 这些是写作和阅读(进行了一些修改),以及用于接收有关当前操作进度的文本消息的方法以及用于处理图像文件的方法。

导出的mainEntry方法之一作为输入参数
接受ASCIIZ字符串,即TrueFFS 7.1软件实用程序手册(3)中描述的命令。

“ DOCSHELL.dll”中的解析器处理收到的命令,并根据命令及其参数,使用初始初始化期间收到的指针从主编程器软件调用一个或另一个方法。

对于程序员的软件,我们决定自己编写。 一方面,这种方法使我们免于“挖掘”原始文件,以遵守主机和程序员之间交换信息的协议,另一方面,它极大地简化了调试过程,如果将该模块集成到原始软件中,则在某些方面变得不可能。或极其困难。

程序员的本机用户界面是用Visual Studio 2017中的C#编写的。包括源(6)

当然,功能性是第一位的,因此毫无疑问外观和源代码本身的文本都一样。 因此,程序的简约“设计”如下。


在主窗口(也是唯一窗口)的顶部是一个菜单按钮,您可以在其中分配任意功能。 稍后将描述菜单项“ XILINX”。

以下是两个窗口。 上部显示从程序发送到“ DOCSHELL.dll”插件并从中接收的消息。

在底部窗口中,您可以键入所需的命令,然后在相应的行中双击它们。

程序启动时,将显示一些命令。

如果您突然开始使用真正的芯片-请小心,因为 没有警告,提示您格式化时可能会丢失所有数据。 该程序未实现。

在“ Dataman”中已安装的PG4UW (4)程序的目录中找到“ DOCSHELL.dll”文件(可以从“ Elnec”中找到)。

为了能够在您的程序中使用第三方DLL,您需要一个带有导出方法及其参数说明的头文件。 由于他的缺席,我不得不亲自恢复此信息。 此类恢复的方法不在本文的讨论范围之内,因此可以在随附的源代码中找到导出的方法的参数。

通过用户界面与插件的交互,问题变得更加清晰了。 现在,您可以在物理级别继续与微电路进行通信,以便能够执行从插件接收到的对/ mDOC的读/写命令。

程序员的程序模块是用C语言在IDE“用于ARM的IAR嵌入式工作台”中编写的。 源(7)已附加。

它的调试是使用JTAG J-Link调试器进行的,该调试器通过安装在机箱侧面的JTAG连接器连接到编程器,并通过扁平电缆连接到主板。

JTAG调试器J-Link v9在Aliexpress上购买。 随“ IAR嵌入式工作台(用于ARM)”一起安装的驱动程序可以很好地工作,甚至从SEGGER更新本机固件也成功。


从结构上说,编程器是由八个板组成,一个板位于另一个板的上方,并通过连接器连接在一起。


可调式DC-DC转换器位于最低的板上,以产生与各种存储器微电路配合使用所需的多个电压。
在它上面的主板上有ATMEL AT91SAM9G20 ARM微控制器,SDRAM,带有固件的SPI FLASH,带有编程器型号和序列号的ID芯片AE801,USB芯片ISP1582,用于DC-DC转换器电压管理的TLC7226数模转换器,许多其他芯片和外部连接器,用于连接电源和USB电缆,用于连接至主机。

在第三块底板上是XILINX XC2S50E芯片,它在读/写过程等过程中控制连接到编程器的适配器上的芯片脚。
在其他五块板上依次加载寄存器和组件,并通过晶体管键将它们连接到其输出,通过它们可以将微电路应用于由DC-DC电压转换器形成的芯片的一条或另一条支路,
包括“地球”。 由于控制晶体管键的寄存器被顺序加载,并且适配器中受控支脚的数量可以达到144,因此加载所有键块需要花费大量时间。 因此,借助于晶体管开关,只有静态电平被馈送到微电路:接地,电源等。 并使用XILINX-动态:地址,数据,CS,OE,RD,WR等。

为了进一步发展,至少需要一种为XILINX XC2S50E微电路创建固件的方法和电路图,如果不是整个编程器,则至少应包括CPU-FPGA-适配器-插座的一部分。

至于XILINX Spartan-IIE的IDE,我必须使用旧版本的ISE 10.1,因为 所有后续的IDE不支持Spartan-II FPGA模型。

电路图的情况变得更加复杂。 为了识别我们感兴趣的化合物,我们不得不从开发板上“卸下” U4和XILINX U12处理器,以便在其BGA封装下接触到焊盘。 并非所有人都切换到反面。
主机通过多个端点(端点)通过USB与编程器通信。 主机始终充当主机。 主机通过其中一个端点向编​​程器发送命令,并通过它接收确认,
通过另一个,他们彼此交换数据。

程序模块中主机的解析命令是通过USB_ReceiveBuf_EP1RX_Parse()方法执行的。

该命令包由CMD_PROG结构描述,并由几个字段组成。 如果Cmd字段包含1,则这是用于微电路的命令,在这种情况下,ProgProcNum字段是PROG_PROC结构的_progProcedures数组中的索引,在其中一个字段中存储了要执行的命令的指针。

在已安装程序“ SUPERPRO 6100N”的目录中,有一个子目录“ \ lib”。 它带有扩展名“ * .bin”,用于存储编程器支持的所有类型的芯片的XILINX固件文件。 其中有两个通用固件,用于检查微电路的支脚与适配器中插座的接触。

这是带有所有内部XILINX上拉脚的内部上拉电阻的“ GENERAL〜.BIN”和带有内部下拉电阻的“ GENERAL_.BIN”。

通过以下方法在软件模块的SOCKET_CkeckInsertIC()方法中检查微电路支脚的接触。

首先,将“ GENERAL_.BIN”固件加载到XILINX中,并借助其固件将连接至插座的所有FPGA支路配置为输出,并为其提供逻辑“ 1”。 然后,依次将每个FPGA分支重新配置为输入,从中读取逻辑电平,然后再次向该分支输出“ 1”。

如果微电路支脚与相应的插座支脚电气接触,则应从中读取“ 1”(通过所有其他支脚的微电路内部保护二极管)。 而且在没有接触的情况下,由于所有FPGA引脚都被拉到地,因此将从该输入读取“ 0”。 之后,将以此方式读取的逻辑级别数组发送到主机并在此进行处理。 接下来,继续执行指定的操作,或者显示有关插座中微电路相应支脚的非VKontakte的消息。
成功通过此测试后,主机会将与适配器中安装的芯片相对应的XILINX固件发送给编程器。

在ISE 10.1中为FPGA编译程序(依次执行综合程序(Synthesize),实施设计(实施设计)和生成编程文件(生成编程文件))在项目目录中创建了78756字节的二进制配置文件“ xeltek.bin”。 为此,必须在“常规选项”类别的“进程”窗口中的“生成编程文件”进程的属性中,设置两个选项:“创建位文件”和“创建二进制文件”。

由于什么原因,这是未知的,但是XELTEK程序员决定通过镜像每个字节中的所有位来修改由此获得的文件。

如果出于某种原因需要以这种方式“镜像”自己的文件,或者将“ \ lib”目录中的文件“镜像”回到普通视图,则在“ XILINX”菜单中的软件中为此目的有一个“ Bitstream Converter”项(名称的末尾)结果文件带有下划线)。

为了在物理级别上使用SDED5芯片,在软件模块中实现了以下四种方法:

-PROGPROC_FLWRITE_IO_WORD()-在指定地址记录一个字(16位)
-PROGPROC_FLREAD_IO_WORD()-读取指定地址的字(16位)
-PROGPROC_hal_blk_write_nor()-在指定地址写入一个或多个扇区(每个512字节)
-PROGPROC_hal_blk_read_nor()-在指定地址读取一个或多个扇区(每个512字节)

为了与固件中的FPGA XILINX交互,我们确定了四个寄存器(I / O端口,在ARM源的common.h文件中进行了描述)。

-_IC_ADDR(0x30000010)
-_IC_DATA(0x30000012)
-_IC_CTRL(0x30000014)//出:0-WE,1-0E,2-CE,3-RSTIN; 在:0-忙
-_IC_ENABLE(0x30000016)//输入:7-工作许可(0-有效,1-Z形插座上的所有支脚)

_IC_ADDR和_IC_DATA是SDED5可编程芯片的16位地址和数据寄存器。
_IC_CTRL-8位控制寄存器,通过它可以设置WE,OE,CE和RSTIN信号,并从SDED5中读取BUSY信号。

原始软件模块使用从0x30000000到0x3000000E的地址与FPGA通信。 带有XELTEK铭文的CPLD是作为编程器中的地址解码器安装的,并且由于我们不知道其固件,因此我们使用了0x30000010中的地址,以防万一减少使用“标准”地址时表现出别人的行为逻辑的意外后果的可能性。

将其固件加载到FPGA中后,连接到插槽中微电路支路的所有FPGA输出均处于Z状态,并且要开始使用它,必须通过将零写入_IC_ENABLE寄存器的第七位来启用分辨率。

整个系统的算法如下所示。

  1. 在主机上启动软件后,它将检查是否通过USB与编程器建立了连接,并在主窗口底部的状态栏中显示相应的消息。
    (可以在程序启动后连接编程器)。
  2. 用户选择他打算使用的芯片类型。
  3. 在数据库中(在最简单的情况下,仅在文件中),所选的微电路与所需适配器的类型匹配,并且向编程器发送了安装在其中的适配器类型的请求。
  4. 程序员向适配器询问其类型,然后将该信息发送回主机,在此将该信息与数据库中找到的信息进行比较,如果适配器类型匹配,则工作将继续。
  5. 对于软件中选择的每种类型的微电路,应显示相应的菜单以及该微电路可用的命令(读取,写入,检查清洁度,比较等)。
  6. 当选择用于微电路的菜单项时,相应的命令将发送到编程器,此后编程器首先检查插座触点与微电路的支脚之间的电接触,然后,如果成功,则执行此命令。

在本文附带的源代码中,为了简化任务,未实现从第二个到第五个(包括五个端点)的点。

总结


我们没有面临将软件模块集成到原始软件中的任务,
因此,本文中描述的材料并不声称是完整的解决方案。
我们希望此处提供的信息对某些类别的读者有用,并尽我们最大的能力和空闲时间的可用性,我们将尽力回答您的问题。

感谢您的关注!

资源资源


1。 PDF-具有嵌入式TrueFFS闪存管理软件的mDOC H3嵌入式闪存驱动器(EFD)
2。 PDF-使用Dataman器件编程器对mDOC H3闪存进行编程
3。 PDF-Software_Utilities_TrueFFS_7.1
4。 Dataman控制软件-PG4UW
5, 用于Linux的mDOC H3驱动程序的实现(未测试性能)
6。 主机程序员源文件(Visual Studio 2017)。
7 软件模块的源文件(适用于ARM v8.30.1的IAR嵌入式工作台)。
8。 FPGA XILINX XC2S50E(XILINX ISE 10.1)的源文件。

Source: https://habr.com/ru/post/zh-CN430634/


All Articles