TCC7901 调试过程

首次接触到TELECHIP的平台,不得不感叹一下,这个平台的工具还真是好用,不得不说TELECHIP的工程师们想得周到。

本人这次用到的是TCC7901,具体调试过程如下:

一、基本开发流程

1、首先找到了一个官方的BSP包,本来是想去官方网站下载的,但可惜,只有TELECHIP的客服才能下载,所以通过了其它办法拿到了一个2.2版的BSP包。

2、创建了一个基本工程,按默认的配置编译了一下BSP包,验证通过OK。

3、利用Config_120.exe工具配置了一下BSP参数;这里主要设定RAM大小,屏大小,TP 用的I2C通道,LCD的时序参数。

4、重配置了一下telechips.bat,添加了一个设备驱动;双击这个BAT文件,选择BULID BSP包。

5、利用FWDN_V5_120.exe工具,将生成的NK.ROM,tcboot.rom下载到设备板,

  这里要设成USB BOOT模式,BM[2]脚接高NAND BOOT,接低USB BOOT。另外USB要设成DEVICE。

6、FWDN_V5_120.exe工具可以对NAND 分区配置,格式化NAND FLASH,下载LOGO等功能,非常方便。

二、具体调试

1、显示驱动:由于每家用的屏都不一样,所以屏的参数必须要调整的,一般来说改动的地方不多,由于我用到是3.5寸的屏,所以我做了如下改动:

#define IMAGE1_WIDTH     320
#define IMAGE1_HEIGHT    240

#define LCD_WIDTH       320
#define LCD_HEIGHT      240

 #define LCD_DEVIDE  12

 #define LCD_VPW   (1)
 #define LCD_VBP    (13)

 #define LCD_VFP    (9)

 #define LCD_HPW   (1)
 #define LCD_HBP    (70)

 #define LCD_HFP    (17)

另外背光控制IO做了调整。

由于我的屏是通过SPI方式初始化的,所以还在TCC_LCD.C里面加了模拟SPI通讯函数。

2、TOUCHPANEL调试:

TOUCHPANEL用的是TSC2003,BSP包里面有这个驱动,只要对一些参数稍做调整,

#define MAX_X   3810//3940
#define MIN_X   245
#define MAX_Y  3610//3870
#define MIN_Y   456 //

 

这些参数你在点屏的时候,可以通过驱动打印出来。

校验完屏之后,读取校屏的座标参数写入注册表。

"CalibrationData"="644,476 112,68 120,864 1168,864 1168,80 "

3、HOST USB

BSP包里面已经实现了USB HOST,只要添加相关的组件即可。

我添加的USB组件有 
--> Core OS --> Core OS Services --> USB Host Support --> USB Storage Class Driver
--> Device Drivers --> USB Function --> USB Function Clients --> Mass Storage
--> Device Drivers --> USB Host --> USB Host Controllers --> OHCI

4、SD 卡、I2C、SPI:

这样驱动BSP包已实现了,SD卡只要添加相关组件就可以用了。主要有两个:SD Host Controller,SD Memory。

这里主要要自己实现的可能就是插/拔卡通知了。可以采用事件。

另外就是大容量SD卡支持,将common.bib里面做如下修改:

   sdbus.dll      $(_FLATRELEASEDIR)/sdbus2.dll                 NK  SH

拔卡出SD卡后,卸载文件系统时间修改。

[HKEY_LOCAL_MACHINE/System/StorageManager]
    "Dll"="fsdmgr.dll"
    "PNPUnloadDelay"=dword:12c //300MS

 

5、HIVE 注表的实现

(1)、在PLATFORM.reg里面添加如下注项。

;HIVE BOOT SECTION

[HKEY_LOCAL_MACHINEinitBootVars]
"SYSTEMHIVE"="Documents and Settings/system.hv"       ;system.hv会保存到HDDDocuments and Settingssystem.hv
;"PROFILEDIR"="Documents and Settings"   ;user.hv会保存到HDDDocuments and Settingsdefaultuser.hv
"Start DevMgr"=dword:1     ;
"DefaultUser"="default"         ;咱们只有一个用户default,基本上就是决定user.hv的路径了
"Flags"=dword:3  ;这个应该是wince 5.0下决定在哪个阶段启动device.exe的表项
"RegistryFlags"=dword:1     ;这个就是设置注册表每次改动后自动flush到system.hv

; END HIVE BOOT SECTION

 

(2)、在nand 的注册表中加入到;HIVE BOOT SECTION 与; END HIVE BOOT SECTION之间。同时再添加句 

[HKEY_LOCAL_MACHINE/System/StorageManager/Profiles/Nand]

           "MountAsBootable"=dword:1   ;这个是wince 5.0下指定这个分区保存system.hv的关键

 

6、多语言的实现,

(1)菜单 Platform -> Settings,Locale中选择中文,英语,默认选择中文。

(2)在组件中添加:MUI的组件。中文字库选择SimSun & NSimSun250。

(3)sysgen 工程。

(4)运行createmui 0409 ,然后在release目录中找到MultiUI.bib文件,将文件里面的内容复制到COMMON.bib里面。

(5)makeimg 。

 

7、CH7026调试

        通过CH7026将数字的RGB 编码成,CVBS跟VGA输出。这里不作详介绍。

8、字库调整到NANDFLASH里面:

将COMMON.REG 相关的注册项注释掉,同时将COMMON.BIB里面的包含simsun.ttc行注释掉。然后再在platform.reg里面加入如下:

[HKEY_LOCAL_MACHINE/SYSTEM/GDI]
 "FontLinkMethods"=dword:1
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/FontPath]

    "FontPath"="//NAND FLASH"  ; 字库文件所在目录
; @CESYSGEN IF !GWES_DECOMPDRV
[HKEY_LOCAL_MACHINE/SOFTWARE/Microsoft/FontLink/SystemLink]
      "Tahoma"="//NAND FLASH//simsun.ttc,NSimSun"
      "Courier New"="//NADN FLASH//simsun.ttc,NSimSun"
      "Arial"="//NADN FLASH//simsun.ttc,NSimSun"
      "Times New Roman"="//NADN FLASH//simsun.ttc,NSimSun"
      "Symbol"="//NAND FALSH//simsun.ttc,NSimSun"

9、HIVE注册表引起系统慢。

由于HIVE注册表的注册表文件是保存在NANDFLASH里面的,同时RAM里面会有一份副本,NK在运行的时候还是用到的是RAM里面的注册表,我们可能通过如下注册项来设定是否每次改都更新到NANDFLASH里面。

"RegistryFlags"=dword:1     ;这个就是设置注册表每次改动后自动flush到system.hv

但这样会有一个问题,就是在频繁写注册表的时候,就会影响性能了。比如进入TCPMP播放器时会很慢。

解决办法就是用手动刷新,将上面的注册改成“0”,

方法一、在系统关机的时候将RAM保存到NANDFLASH。

方法二、更改刷新注册表时间,比如说有改的时候3秒或5秒更新一次,这样有利于掉电不丢失注册表。这里的时间可以自已定。

获得注册表更新事件:

[HKEY_LOCAL_MACHINE/System/ObjectStore/RegFlush]
; To monitor the flushing from an external process add "ActivityName" registry value.
; The activity name is a global named event that filesystem will signal on Registry Activity.
;   "ActivityName"=""
  "ActivityName"="RegFlushEvent"
; Create an thread in filesys to perform flushing
;    "SpawnThread"=dword:1
     "SpawnThread"=dword:0
; Make the thread IDLE priority
    "FlushPriority256"=dword:FF
; ActivityThreshold specifies the # of reg activity before we force a flush
;    "ActivityThreshold"=dword:100
    "ActivityThreshold"=dword:1
; Timeout period for a flush (flush occurs if there have been some changes during this period)
;    "FlushPeriod"=dword:3E8
;    "FlushPeriod"=dword:7530

在驱动里面打开“RegFlushEvent”一个同名事件,然后创建一个线程,等待该事件,在线程里面手动更新注册表。

 

10、USB-HUB功能:

由于USB不够用,所以用到硬件外扩,软件方面不需要做任何事情,只要USB HOST 驱动OK,接上硬件就行了。

 

这中间还有一个USB插拔检测的问题,因为我通过USB HUB将HOST分成了两个接口:一个USB口,另一个通过IC转成了SDIO接口。这样对于U盘的检测带来了麻烦,因为SDIO接口的卡插拔的时候没有WM_DEVICECHANGE消息,就不能通过这个消息来判断了。
DBT_DEVICEARRIVAL:插入
DBT_DEVICEREMOVECOMPLETE:拔出。

只能自己创建一个消息队列,然后RequestDeviceNotifications,然后再读出消息,就OK了。

 

11、虑拟串口:

虑拟串口,我采用的方法比较简单,就是在我的驱动里面开一个线程接收串口来的数据,因为我主要用到接收数据.其实我写了两种串口驱动,一种用于GPS的将COM虑拟成多个,一个给地图软件用,另外的给一些像时间同步,查看GPS模块信息用等.

还有一种是用于MCU与ARM通讯用,主要是解析串口数据然后分发给不同的应用程序.

while( !pSerial->m_bExit )
 { 
  // 等待串口驱动通知
  WaitCommEvent( pSerial->m_hCOM, &dwCommModemStatus, NULL );

  // 稍候再去读,等数据包到完整

  // 仅处理字符事件
  if( !(dwCommModemStatus & EV_RXCHAR) )
   continue;

  dwBytesRead = pSerial->Read( byRecvBuf, sizeof(byRecvBuf) );

    后面是对BUF的操作...将数据填到一个循环BUF里面.

}

 

 

12、TVP5147 调试:

 

 这个主要是将CAMERA驱动调通就OK了,然后改一个下VP5147的初始化配置.

大概流程是这样,摄像头或者CVBS视频信号输入,通过TVP5147转换成565的信号,通过CIF接口输入到ARM ,然后通过CAMERA驱动读取视频信号,通过TCCCAMERAFILTER-->TCCVRENDERFILTER 显示在LCD上,好像TCC7901输入视频最大支持320*240(如果过大为造成画面闪动,听说好像没有解),然后通过M2MSCALER拉伸到你想要的尺寸,也不知是真是假,但我目前还是用到320*240然后拉到800*240。

 

这里有个问题,就是因为TCC7901 用TSC2003 作为TP A/D,这个IC有个特点,只有DOWN的中断,没有UP的中断,中断来了以后ARM通过I2C去读取TP采样读据。UP的判断为DOWN中断80MS后为UP。如果你一直按着TP就会不停的有中断产生,就会不停的通过I2C读取AD数据,中间只有10MS作为线程轮片。

 

如果在CAMERA预览的情况下,一直按着TP就会发现画面会闪动。但如果低于15帧就不会出现这个问题。

 

13、唤醒与待机:

 

14、更新NK,TCBOOT,APPS:

 更新NK 本来TELECHIP的工具就做得很不错了,但是因为我们内存只有64M还要求GPS后台运行,如果前台在播视频,这样就显得内存严重不足了,所以我用了BIFS文件系统,将NK分成两部分,每次启动只将大约4M的NK装入内存,其它的放入BINFS下面,这样我们的可用内存64-1M显存-6M硬解-4M NK=53M。

这一部分TELECHIP是没有提供的,只能自己想办法。我们现在NK升级,TCBOOT升级,LOGO升级,应用程序,全部通过SD卡一次性升级成功。

 

 待续。。。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章