搜索
bottom↓
回复: 36

(原创)单芯片 MCU 实现的基于网络的 ARM 仿真器

[复制链接]

出0入0汤圆

发表于 2010-7-7 21:23:29 | 显示全部楼层 |阅读模式
介绍

大约 5 年前,由于项目需要,我们公司进过几个 BDI2000 做 ARM 开发。这种基于网络的仿真器不但可以在Windows操作系统上使用,还可以用在 Linux 等非 Windows 平台上,使用起来非常的方便。但是,这种仿真器价格很昂贵,不是普通电子爱好者和工程师所能接受的(这类产品大多使用了 Linux 和 FPGA,所以成本高的惊人)。

我们觉得拥有一台价格低廉功能实用,而且可以在Linux上使用的仿真器也是大家共同的愿望。所以我们耗时4年开发了基于网络的 ARM 仿真器:NetICE。由于使用了特别设计的嵌入式实时操作系统,并且完成了DMA直接驱动JTAG时序的算法,我们成功的在单芯片MCU上实现了基于网络的 ARM 仿真器。


NetICE 内部 (原文件名:裸板.JPG)


正在使用的 NetICE (原文件名:外观图.JPG)



基本功能:

- 支持 ARM7TDMI, ARM7TDMI-S, ARM920T, ARM926EJ-S, ARM966E-S 和 CortexM
- 支持 JTAG 和 SWD 两种调试协议 (只有CortexM可以使用 SWD )
- 支持任何带网络功能的操作系统:Linux, BSD, Solaris, MacOS, Windows, etc.
- 内建 Angel RDP Agent,支持 ADS 1.2 集成开发环境
- 内建 GDB Server, 支持 GDB 和 IAR 调试
- 内建 telnet 服务器,telnet 控制台支持行编辑和输入历史功能
- 支持 tftp 下载和上传
- 支持动态载入 flash 编程驱动。支持的 flash 包括各种 ARM SoC 的片上 flash,片外 flash,NOR flash, NAND flash等。这些编程驱动的源代码全部开源。


使用说明书:
ourdev_566488FP2FV5.pdf(文件大小:821K) (原文件名:NetICE-UserGuide.pdf)



下面是我们作的一些速度测试


测试数据 (原文件名:benchmark.PNG)




应用截图及视频:


telnet 控制台 (原文件名:linux演示.JPG)

播放地址: http://v.youku.com/v_show/id_XMTg3NzY0Nzc2.html       



ARM GDB 调试演示 (原文件名:GDB演示.JPG)


播放地址: http://v.youku.com/v_show/id_XMTg3NzY2NzIw.html


初期 release 的产品完全是手工焊接(我们焊功不好),模具是用公模自己改的。SWD调试时不支持3.3V到5V的电平转换。到目前为止,我们已经试用快一年了,产品基本稳定下来,可以提供给大家品鉴,请大家多多指教。

这批只做了 10 个(一个自用),感兴趣的朋友请到我们的淘宝店看看吧:

http://shop62029081.taobao.com/

阿莫论坛20周年了!感谢大家的支持与爱护!!

曾经有一段真挚的爱情摆在我的面前,我没有珍惜,现在想起来,还好我没有珍惜……

出0入0汤圆

发表于 2010-7-7 22:12:37 | 显示全部楼层
看了标题,吓了我一大跳,老兄,真能吹!!!
本来以为你会公布源代码,或者原理图PCB图之类的,没想到只有一个淘宝链接,既然不是技术帖,那么有必要大家从技术上讨论一下,避免成为广告帖!!!

1) license问题
    使用了GPL的软件,你应该怎么做,不用我来提醒你吧?

2) 数据吞吐量问题
    基于AT91SAM7X,48M的速度,我就不信你速度能超过J-Link pro

3) NAT穿透问题
    如果不支持NAT穿透,那只能在局域网内使用

4) 电源问题
    不支持PoE,又没有电源口,那用网络时同时得接USB接口供电,累赘

5) 兼容问题
    “这一版 NetICE 支持现在最常用的一些 ARM 芯片,它不提供固件更新的功能。所以,敬请用户看清它所支持的 ARM 芯片类型。
    对于 ARM11, Cortex-A8, Cortex-A9 及 XScale,敬请关注我们后继推出的产品。”
    换句话说,除了ARM7, 9, cortex-M外,表想了

6) 性价比问题
    328买块AT91SAM7x的开发板,价格差不多了,但如果买开发板,一定会提供一堆一堆的例程,但买了这个。。。想不出来有啥用。。。不如用J-Link

7) 唬人问题
    LZ一上来搬出来一大堆BDI2000/3000的,以为会跟BDI比比呢,仔细一看,差远了。表拿这种牛器出来,软件支持差远了。。。
    一个例子,如何调试Davinci的ARM9core?有试过吗?支持吗?

出0入0汤圆

发表于 2010-7-7 22:23:05 | 显示全部楼层
拒绝广告!
用JLINK的飘过

出0入0汤圆

发表于 2010-7-7 22:44:20 | 显示全部楼层
mark!~

出0入4汤圆

发表于 2010-7-7 23:06:22 | 显示全部楼层
回复【1楼】taoist
-----------------------------------------------------------------------

精辟

出0入0汤圆

 楼主| 发表于 2010-7-7 23:43:24 | 显示全部楼层
to 1楼:

就阁下提出的疑问,我的回复是这样的:

1、系统的 RTOS 是从 2002 年开始开发的,是原创的。用在这个地方的是一个精简版,只支持基本的同步原语,8个task,8级优先级,另外还有一个背景任务(第9个task,优先级最低)。网络协议栈用的是 lwIP ,license 是 BSD license (而非GPL)。另外,除此以外的所有代码均是业余时间开发的。您可能会提到C库,这个也是自己写的,没用的函数都没实现。

2、数据吞吐量的问题,我在上面已有实验列表。这些数据是在家里的机器上实测的(Fedora 12,P4 Core 2 2.4G)。另外,我没有用过jlink-pro,所以没有做过比对。按道理说,它的应该比我的要快。另外,我在列表里写的是kbps,也即: K bit/s,不是 Jlink 的 KBps,还请大家注意。

3、NAT 穿透没有试过,因为设计之初就没有想过要支持这个特性。

4、PoE 支持在于 PHY 要支持,和软件没关系。另外,如果支持 PoE,那么网线另一端(交换机或者PC)都得支持PoE,否则也不能供电。这在实际应用中局限性很大。

5、现在支持的 ARM7, ARM9 和 Cortex-M3, Cortex-M0 芯片都是自己买板子一点点儿调出来的。ARM11, Cortex-A8, Cortex-A9 和 Xscale 的开发板太贵了,一次就投入那么多时间和资金,实在是有些为难。不过,如果大家支持,我们还是可以继续做下去的。

6、这个“盒子”现在卖 328 块。一方面,我们需要收回部分成本;另一方面,如果免费赠送,可能它不太能到真正需要它的人的手里,我们希望拿到它的人能对这件小工具认真一些。同时,我们也希望通过这几个样品能得到大家的反馈,把它做得更好一些。

7、我们的 NetICE 支持 JTAG 链多节点调试。您说的那个 Omap 的芯片里的 DSP 核和 ARM926 核如果是按标准的 JTAG 链多节点链接方式连接,我们的 NetICE 应该是支持里面的 ARM926 核的。我们实际在 STR912 上试过的,里面的 JTAG 链上有 3 个节点。



现在,在这边冒个泡,也是想凑个热闹。希望和大家一起分享自己几年来业余时间里做的一个小工具。淘宝上的店也是为了便于和大家互通有无,只能在业余时间打理,我们不是什么专业公司,就是一民间兴趣小组而已。有什么不妥的地方,还请大家指正。

出0入0汤圆

发表于 2010-7-8 00:09:50 | 显示全部楼层
呵呵,这才有了技术讨论的氛围了

1)总结一下,不管怎么说,就是死活不开源咯,换句话说,LZ的帖子就是纯广告帖咯。。。

2)很想听听你的道理,为什么说道理上比不过J-Link pro,多好的卖点啊。。。

3)总结一下,只能在局域网内使用

4)回避我的问题,我是说用网络口还得接USB供电,累赘

5)要别人支持,也得支持别人呀,别人出了银子,就买现在的这些功能,贵,不如当开发板卖吧。。。

6)请问真正需要它的人是哪些人呢?换句话说,产品的定位在哪里?

7)Davinci是Davinci,OMAP是OMAP,这2个是不一样的产品系列,但一样的是都是icepick结构,是有条件地jtag链多节点链接方式连接。没有试过请不要用“应该”一词。
    如果你用过BDI2000/3000,去看看人家的cfg文件吧
    在技术上,窥一斑而见全豹是不可取的。。。。


你的冒泡如果只是想发广告卖东西,那么发错地方了。
分享你的工具要拿出诚意来,贡献原理图啊,PCB图啊,源代码啊。。。

出0入0汤圆

发表于 2010-7-8 08:38:27 | 显示全部楼层
能支持KEIL MDK调试的话就不错。

出0入0汤圆

发表于 2010-7-8 09:08:18 | 显示全部楼层
jlink有RDI与GDB Server可用,不知道谁有经验来说一说。

出0入0汤圆

 楼主| 发表于 2010-7-14 22:20:35 | 显示全部楼层
在Windows下使用Jlink,先使用J-Link RDI Config配置目标板,包括:使用初始化宏文件和配置flash设备等,然后启动J-Link GDB Server。

在Linux下使用Jlink,要先是安装Windows虚拟机,再安装Jlink的应用文件(当然,也有在Windows下用虚拟机跑Linux的情况,反正是要装虚拟机的);或者用另一台Windows机器来接Jlink。接下来的步骤和Windows下使用是一样的。



在Windows下使用 NetICE,用telnet登录NetICE运行init命令就行了。init命令下载初始化配置文件完成对目标板的初始化,并加载flash烧写驱动程序。

在Linux下使用NetICE,和在Windows下使用没有任何区别。

NetICE 不需要安装任何设备驱动程序,也不需要任何DLL文件。这使它可以非常方便的在任何操作系统上方便的使用,不需要担心操作系统的类型和版本问题。它的初始化配置文件的语法简单(和Jlink的初始化宏文件类似),用户可以非常方便地利用Jlink的初始化宏文件来编写NetICE的初始化配置文件。

出0入0汤圆

发表于 2010-7-15 13:04:41 | 显示全部楼层
这个东西不错嘛, 虽然不开源, 但是h-jtag照样没开源啊, jlink完全是反向工程搞出来的.
楼主的工程经验丰富啊.

出0入0汤圆

 楼主| 发表于 2010-7-15 21:14:42 | 显示全部楼层
我一般是埋头苦干,很少上论坛的。借这个机会,认识一下各位了。

出0入0汤圆

发表于 2010-7-15 22:32:25 | 显示全部楼层
回复【11楼】mcu.runner
我一般是埋头苦干,很少上论坛的。借这个机会,认识一下各位了。
-----------------------------------------------------------------------

比唐骏好很多!

出0入0汤圆

发表于 2010-7-16 01:18:51 | 显示全部楼层
支持楼主。开源不开源自己说了算,哈哈。这个就不要强求啦

出0入0汤圆

发表于 2010-7-16 01:56:22 | 显示全部楼层
半夜发贴,建议适度开源,不要太开,否则.....

出0入0汤圆

 楼主| 发表于 2010-7-16 20:59:32 | 显示全部楼层
多谢大家的支持,下面晒 NetICE 系统框图!



系统框图 (原文件名:NetICE-diagram.gif)

出0入0汤圆

发表于 2010-7-17 08:48:11 | 显示全部楼层
支持楼主!

出0入0汤圆

发表于 2010-7-17 12:28:32 | 显示全部楼层
看看

出0入0汤圆

 楼主| 发表于 2010-7-21 21:58:50 | 显示全部楼层
这几天比较忙,没顾得上发帖。下面介绍一下 NetICE 的 Flash 编程原理。

NetICE 的 Workspace Engine 用于支持 Flash 烧写。驱动程序是动态下载到目标板的 RAM 中(只需要载入一次)。NetICE 把一个大的数据块分割成若干小块,然后再把这些小数据块一个个写入目标板的 RAM 中。NetICE 每下载一个子块就运行一次驱动程序。驱动程序由目标板上的 CPU 运行,完成相应的烧写动作。

读操作和写操作类似。但是,对于 norflash 而言,读操作和普通Memory读是一样的。附件文件是 QQ2440 的 nandflash 驱动的源码,感兴趣的朋友可以下载下来看看。编译工具是 arm-elf-gcc,已经包含了makefile 文件,如果你的gcc不是 arm-elf-gcc,也没有关系,只需要把 makefile 的第一行略作修改即可。

友善之臂 QQ2440V3 的 nandflash 驱动ourdev_569809.rar(文件大小:4K) (原文件名:2440nand512.rar)




Flash 写操作 (原文件名:FlashWrite-Diagram.gif)



Flash 读操作 (原文件名:FlashRead-Diagram.gif)

出0入0汤圆

 楼主| 发表于 2010-7-22 20:44:29 | 显示全部楼层
今天把 NetICE 支持的 flash 烧写驱动源代码给整理了一下贴上来。

Flash 烧写驱动程序源代码ourdev_570005.rar(文件大小:39K) (原文件名:flash-drv-src.rar)

其中,

初始化文件:


AT91SAM7XEK
AT91SAM9260EK
AT91SAM9261S
LM3S
LM3SSWD
LPC11xx
LPC13xx (未测试)
LPC17xx
LPC2103
LPC2368
QQ2440
S3C44B0
STM32
STM32SWD
STR9
STR9JTAG


flash 烧写程序

SLC-NAND 2KB 模板
SLC-NAND 512B 模板

QQ2440 SLC-NAND 2KB
QQ2440 SLC-NAND 512B (在 QQ2440 上测过)
9260 SLC-NAND 2KB (在 9260EK 上测过)
9260 SLC-NAND 512B
9261 SLC-NAND 2KB (在 9261EK-核心板上测过)
9261 SLC-NAND 512B

AT91SAM7S (在 AT91SAM7X256 上测过)
STR9CUI (在 STR912 上测过)
STM32 (在 STM32F103C8 上测过)
LM3S (在 LM3S102 上测过)
LPC2xxx (在 LPC2103 和 LPC2368 上测过)
  LPC2103 LPC2131 LPC2141 LPC2132 LPC2142 LPC2134 LPC2144 LPC2364 LPC2136
  LPC2146 LPC2365 LPC2366 LPC2138 LPC2148 LPC2367 LPC2377 LPC2378 LPC2387
  LPC2388 LPC2458 LPC2468 LPC2478
LPC1xxx (在 LPC1114/301 和 LPC1766 上测过)
  LPC1111 LPC1311 LPC1112 LPC1113/201 LPC1113/301 LPC1114/201 LPC1114/301
  LPC1342 LPC1313 LPC1343 LPC1751 LPC1752 LPC1754 LPC1764 LPC1756
  LPC1765 LPC1766 LPC1758 LPC1759 LPC1767 LPC1768 LPC1769


未测试的,但是有源代码了

ADuC70xx
SST39xF-16
SST39xF-8
STR7
LPC2101
LPC2104_5_6
  LPC2104 LPC2105 LPC2106

出0入0汤圆

发表于 2010-7-26 21:28:52 | 显示全部楼层
不错,顶|!

出0入0汤圆

发表于 2010-7-27 06:47:32 | 显示全部楼层
印象中,使用Ethernet的JTAG工具,速度应该要快不少的,这个的速度应该还有优化空间。
如果是原创的东西的话,还是要支持一下的,本身国内的ARM调试工具,已经就没有什么原创的东西了。

当然,这些东西,国内也确实没有必要原创
和D版的JLink比,都不会有什么优势的

> - 内建 Angel RDP Agent,支持 ADS 1.2 集成开发环境
这个协议是公开的吗?

出0入0汤圆

 楼主| 发表于 2010-7-27 08:07:19 | 显示全部楼层
回复【21楼】chengyingavr  
-----------------------------------------------------------------------

协议是公开的,可以查阅 ARM 提供的文档。按下面的办法即可查到。


www.arm.com

SUPPORT->Resources->Documentation

ARM Developer Suite
  Angel Debug Monitor
    Angel Debug Protocol
    Angel Debug Protocol Messages

出0入0汤圆

发表于 2010-7-27 14:21:18 | 显示全部楼层
吼吼,谢谢,偶看看
这个协议可以在IAR下使用吗?
偶也试试看弄个这个协议支持

出0入0汤圆

 楼主| 发表于 2010-7-27 14:47:14 | 显示全部楼层
NetICE 的 Angel 协议在 IAR 下使用有些问题,但是在 ADS 1.2 下可以用。

另外,Angel 不支持 Cortex-M 系列,是一种比较老的调试协议。

出0入0汤圆

发表于 2010-7-27 16:57:58 | 显示全部楼层
只支持ADS的话,估计就对这个协议没什么兴趣了,ADS只有以前玩MTK的时候,才用过。
关于调试器,以后还是可以多交流一下的。
以后等偶有时间的话,可以给这个工具移植偶的协议玩玩。

出0入0汤圆

 楼主| 发表于 2010-7-27 22:11:58 | 显示全部楼层
偶也是为了让 NetICE 支持 ADS,才去研究 Angel 的。

这版 NetICE 使用的是 AT91SAM7X256 来做的。系统工作频率是 72MHz, 但是,Flash ROM 的速度有限制,所以读等待周期选的是 2,也就是说这是一个 36MHz 的 ARM7 芯片。网络虽然是 100/10M 的,但是,ARM7 还得处理 TCP/IP 协议栈和生成 JTAG 数据序列来做 SPI DMA 操作,“羊毛出在羊身上”,所以速度到现在这个量级。

可能优化的地方是提高“生成 JTAG 数据序列算法”和“SPI DMA 操作”的并行度。但是,油水不会太多。


当然,欢迎大家多提意见啦。。。。。。

出0入0汤圆

发表于 2010-7-27 23:50:17 | 显示全部楼层
油水到处都有,既然知道JTAG的最高性能是用SPI+DMA方式实现,那么JTAG上的性能提升空间就已经不大了,估计要重启他地方考虑了。

这里举个例子吧:比如你这里STM32_JTAG的Flash下载速度是100kb/s,我这里测试到的速度是128K的STM32,使用内部8M时钟,JTAG下载Flash最高速度是32KB/s(Ubuntu下测试得到,Windows下要慢10%,据说JLink使用专门的工具,可以得到28KB/s的速度),如果是LPC1766的话,甚至可以超过70KB/s。而且,我评估下来,瓶颈是在12M的USB口上,用网口的话,应该可以得到更快的速度,这个也就是为什么原来说以后有空的时候,可以移植偶的协议栈测试一下速度。
几种优化可以考虑的:
1. JTAG超频,http://blog.ednchina.com/SimonQian/1749321/message.aspx
2. 优化Flash算法,简化操作,使用并行下载方式
3. 协议优化,GDB本身就不是高性能的协议,用于下载Flash的话,速度问题更加明显,当然,用于调试还是很不错的

出0入0汤圆

发表于 2010-7-28 09:48:32 | 显示全部楼层
晕,不支持iar

出0入0汤圆

 楼主| 发表于 2010-7-28 11:46:15 | 显示全部楼层
回复【28楼】soswelcome  
-----------------------------------------------------------------------

NetICE 通过 GDB Server 协议支持 IAR

出0入0汤圆

 楼主| 发表于 2010-7-28 20:43:11 | 显示全部楼层
回复【27楼】chengyingavr  
-----------------------------------------------------------------------

原来是 Simon 大侠,失敬失敬啊。我看到互联网上有好多阁下的资料啊。

非常感谢你的建议,我有时间也试试看。

回头多交流联系。

我的 e-mail: lezhi.cn@gmail.com

出0入0汤圆

发表于 2010-7-31 00:14:45 | 显示全部楼层
这2天项目太忙,所以没有上网

国内,能有自主做ARM仿真器的已经不多了,确实很难找到人交流
即使不是用D板的,基本上也只是并口仿真或者基于FT芯片的东西
难得看到一个,支持一下还是必须的

出0入0汤圆

发表于 2010-11-3 20:39:10 | 显示全部楼层
强帖,留名

出0入0汤圆

 楼主| 发表于 2010-11-30 21:34:05 | 显示全部楼层
与DIY相关的资料我把它放到了EDN China的博客里,大家感兴趣的话,也可以下载资料来自己DIY。

这些资料包括:固件BIN文件、Gerber文件、BOM单和电路原理图等。

感兴趣的童鞋去看看吧。

http://blog.ednchina.com/MCUrunner/1937562/message.aspx

出0入0汤圆

发表于 2010-11-30 22:25:40 | 显示全部楼层
要是硬件能兼容J-PRO就好了,呵呵。

出0入0汤圆

发表于 2010-12-1 00:30:10 | 显示全部楼层
调试工具中最重要的不是jtag这个调试器件了
jtag基本已经普及

最重要的是易用的pc断调试软件
用用trace32就知道是多么的易用了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-8-26 23:25

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表