EDA驿站

去浮躁,求真知;重实干,勤与研

  博客园  :: 首页  :: 新随笔  ::  ::  :: 管理

STV0680系列数码相机芯片的指令测试

陈玮 李勃 张果

(昆明理工大学 信息工程与自动化学院,昆明,650051)

摘要:本文详细介绍了在“远程图像采集电话”项目的研究过程中,对市场上流行的简易数码相机进行串口改装与指令测试的全过程。笔者使用了VC++ Debugger、串口监视工具和自制的串口数据分离线完成了对STV0680-001芯片组的指令测试工作。

关键字:指令测试,数码相机芯片,STV0680

0 引言

“远程图像采集电话”是利用单片机、数码相机和Modem来实现静态图片信息采集、传输的新型数码电话。该“电话”在普通电话上加配了价格低廉的35万像素的数码相机和Modem,并由单片机控制来实现图像的远程采集。与市场上流行的各种远程监控系统、可视电话、彩信、固话短信等技术相比,该研究成果由于成本低廉、功能实用,相信会在静态图像信息采集领域找到广泛的应用。

要想用单片机来控制数码相机则必须知其指令集,而芯片的指令集属于技术秘密,不是能轻易得到的。研究小组就与国内使用STV0680芯片的厂商进行过广泛的联系,可它们也没有与指令相关的技术文档可以提供。所以,只能靠指令测试的技术路线来推进研究工作。

STV0680芯片指令测试的工作,是深入研究这款数码相机芯片的内部结构、工作原理、数据通讯控制协议、指令系统的使用方法、CCD格式图像数据存储结构等技术难点的基础。是能否进行“远程图像采集电话”项目研究所要解决的关键技术。下文将详细的叙述对STV0680-001芯片进行指令测试和研究的过程。

1 指令的测试过程

1.1 数码相机的串口改装

1.1.1 STV0680芯片系列简介

市面上35万像素的数码相机都用这个系列的芯片,常见的有STV0680B-001STV0680B-003STV0680系列芯片是意法半导体公司(ST)出产的低价位的双模式数码相机芯片。它具备RS232USB两种接口, 并同时支持CIFVGA图像。STV0680芯片不支持与PC串口的直连,要想用串口与PC通讯就必需另做一块物理线路驱动电路(可以用标准的RS232收发芯片,也可用分立元件制作)。相机本身并不做色彩处理,以保证芯片的简易性和低价性,所以将图像原始数据送到PC后,要用其专用的色彩算法处理。[1]

1.1.2 制作过程

将数码相机打开,找到数码相机芯片STV0680B-001—其中第58脚定义为TxD(数据发送), 59脚定义为RxD(数据接收)[2] 。将该两个引脚用电烙铁轻轻焊下并另接导线将其引出即可。这里要注意几点:一是焊接时要在电烙铁断电的情形下进行,二是最好加上电吹风的帮助,还有,焊接完成后最好以塑胶封上。如图1所示:

1:芯片焊接示意图

1.1.3 串口收发器电路

如前所述,由STV0680芯片发送出的串行数据不能与PC的串口直接相连,根据其文档资料,[3]我自行焊接了一串口收发器电路,电路图如图2所示:

2:串口收发器原理电路图

1.2 STV0680芯片的指令测试

而我们在资料收集的过程中发现了关于STV0680芯片的Linux系统下的USB驱动程序,其中包含了许多关于指令的重要信息。比如其中一条语句:

/* get current mode */

if((I=stv_sndctrl(0,stv0680,0x87,0,buffer,0x08))!=0x08)

goto error;

显然,这里的0x87应是获取当前相机状态的一条指令了。这给我很大的启示,经过努力,最终完成了所需指令的测试。下面就谈谈如何通过VC++ Debuger和串口调试工具来进行指令测试测试。

1.2.1 测试用硬件环境

两台双串口的PC:一台用来控制数码相机,一台用来分离来由PC发至相机与由相机送给PC的数据。如果条件有限,用一台PC也可以,但相当麻烦,因为只用一台PC的话,每次只能得到或收或发的一组数据。还要有一根自行焊接的特制的用来分离数据的串口线,电路如图3所示:

3:指令测试用电路图

1.2.2 测试用软件环境

WIN98/WIN2000

Mircosoft Visual C++ 6.0

数码相机测试程序(由外界公司提供)

串口调试工具:WinATE(串口监视器,最好用它)PComm Pro,串口调试精灵等都行;

1.2.3 测试过程

VC6.0中打开数码相机测试程序,并创建其Debug版本(若为Release版的,则不能进行程序调试,具体做法是在Build/Set Active Configuration项中选择Win32 Debug栏),并在有关相机控制的语句上设置断点(用F9键来设置断点),例如下面这些语句:

CameraOpen(OPEN_ID(BUS_ANY, PORT_ANY,

              MODE_EXCLUSIVE, //串口连接只能以独享方式打开

              &hCameara,              //用所有函数的句柄

              &opened);      //返回相机打开的总路线或端口号

GetCameraInfo (hCamera, &CameraInfo);//获取相机信息

SyncCamera( hCamera )//令相机休眠

GetImageInfoEx( hCamera, 0, &m_ImageInfo ); //得到相机里的图片信息

ReadFirstImageBlock ( hCamera, 0, //照片索引值

pBmpImage,   //BITMAPINFOHEADER结构指针

64,           //每次读取的图像数据块的大小

&br,          //已读数据字节数

&imgh);      //IMAGEHEADER结构指针

然后在VC++集成开发环境下按F5键(或用Build/StratDebug/Go)开始程序的测试;

下面是在指令测试过程中,执行完相应的语句后,从WinATE中收到的指令数据:

CameraOpen(OPEN_ID(BUS_ANY, PORT_ANY, MODE_EXCLUSIVE, &hCameara , &opened)

00 80 02 55 AA 00 80 02

00 80 02 FF 89 02 55 AA

说明:这里左边一栏所列的是发送的指令数据,右边是接收到的指令数据。(以下同)

GetCameraInfo (hCamera, &CameraInfo)

00 81 10 00 00 00 95 02

00 81 10 82 17 02

03 00 ,07 06 ,1F 44, A9,0A ,05 53, 02 02 ,00 00 00 00

下面这张表是在VC++调试过程中,打开Debugger中的变量查看工具Watch后,从Watch窗口中观测到的CameraInfor结构及该结构体变量中各成员的变量的值:

GetCameraInfo (m_hCpi, &CameraInfo)

CameraInfo

MemSize

内存大小

0x0000

FlickerFreq

闪光频率

0x0000

SensorID

传感器序列号

0x1f44

CommsLink

连接方式

0x0001

AsicVersion

Asic版本号

0x03000706

DriverVersion

驱动程序版本号

0x01000037

VendorID

供应商ID

0x0553

ProductID

产品ID

0x0202

SerialNumber

系列号

0x00000000

PortID

端口号

0x1001

ThumbSupported

支持小块数据传送否

0x00000001

VideoSupported

支持Video

0x00000000

SensorEnable

传感器状态为开否

0x00000001

显见,这条指令返回的数据为:03 00 ,07 06 ,1F 44, A9,0A ,05 53, 02 02 ,00 00 00 00。其中,0~3字节为AsicVersion03 00 07 064~5字节为Sensor ID 1F 448~9字节为VendorID05 5310~11字节代表ProductID02 0212~15字节指SerialNumber00 00 00 00;第6字节与第7字节代表其余的信息(具体哪一位代表什么意思还未能测出)。

其他几条的指令可藉此方法得到,由于篇幅有限,下面我就将我的最终测试结果列出。

2 测试结果

最终,可以通过对所获取的指令数据的对比与猜测的工作中,总结出相机的指令格式:

发送数据命令(从PC机发送到期Camera)的格式是以按顺序排列的一些字节组成的,这个数据包中包括命令头,数据(可选)等项。下面给出详解:

0x00

CMD

LEN

P1

P2

DCS

CCS

0x02

D1

D2

……

Dn

CMD   命令标识号

LEN   接收或发送数据的字节数。注:当命令接收数据时,这个域设置为非零的除了发送的命令不含附加数据。

P1, P2  命令参数字节(若未用则置0

DCS   数据和校验。这是数据项(d1~dn)的异或值。如果该命令没有数据发送,则将该字节设置为0

CCS   命令头和校验。这是命令头(包括CMD,LEN,P1,P2,DCS)的异或值

D1~Dn 对应命令要发送的数据(以字节计)

接收数据命令与发送数据命令的格式差不多,如下所示:

0x00

CMD

LEN

DCS

CCS

0x02

D1

D2

……

Dn

3 结束语

   通过上述的测试,总结出了STV0680芯片的指令集及其使用方法。在“远程图像采集电话”的研究工作中,用此指令集实现了单片机控制数码相机进行图像下载的汇编程序。

掌握了STV0680系列数码相机芯片的指令,就可以在许多手持设备、PDA等嵌入式系统终端上开发出这款数码相机相应的驱动程序或图像的下载程序,这样,可以在“远程图像采集电话”的后续研究中,将该项研究成果移植到诸如PDA一类的更为智能化的终端上,以满足还需要文字信息录入和管理等工作的需求,从而将“远程图像采集电话”这样的信息采集终端推广到更多领域,更好地提高成果的利用价值。

1STV0680B+ VV6410/6411/6500 DUAL-MODE DIGITAL CAMERA CHIPSET  P1 PDF文档,来源于www.st.com 

2、同上  P46  Figure 11

3MAXIM +5V-Powered, Multichannel RS-232 Drivers/Receivers  P17 PDF文档, 来源于www.maxim-ic.com

4C++程序调试实用手册 [] Chris H.Pappas 段来盛等译 电子工业出版社,北京,2000.10

The Decoding of The STV0680 Digital Camera chipset’s Instruction Set

CHEN Wei, Li Bo, ZHANG Guo

(Information engineering and Automation InstituteKunming University of Science and Technology Kunming 650051)

Abstract: This paper introduces the instruction set’s testing of the STV0680 digital camera chip serial, which is very essential to the research work of the “remote digital photograph collection telephone”. Including changing the digital camera’s USB port to a serial one and the whole processing of decoding the STV0680 chip’s    instruction table

Keyword: digital camera chip, STV0680, instruction decoding

附:

1、  “远程图像采集电话项目”是昆明理工大学研究生课外创新基金资助项目;

2、  作者简介:陈玮(1981~),男,汉族,硕士研究生;主要研究方向:嵌入式系统与数字图像处理;

3、  导师简介:李勃(1955~),男,教授,硕士研究生生导师; 主要研究方向:电子商务与知识处理;

4、  作者联系方式:地址,昆明理工大学新迎校区研20026班;邮编,650051;联系电话,3337635E-mailwantfei@163.com

posted on 2004-05-19 22:54  易学  阅读(4657)  评论(18)    收藏  举报