[原创]MFC5272_BOOTROM开发笔记
/*------------------------------------------------------------------------
Module: MFC5272_BOOTROM开发笔记.txt
Author: amine@263.net
Project:
State:
Creation Date: 2003-01-09
Description: 从各角度描述开发过程, 可能有重复
关键步骤专题描述, 小修改在相关文件描述
[!!!!!]本文档可能微小处与代码不同,如#,@命令, cache enable等
------------------------------------------------------------------------*/
/*------------------------------------------------------------------------
Purpose: 硬件环境
------------------------------------------------------------------------*/
ColdFire5272[66M]
CS0-Am29lv160DB[2M] [0xFFC00000-0xFFE00000]
CS1-Am29lv160DB[2M] [0xFFE00000-0xFFFFFFFF]
CS7-SDRAM[16M] [0x00000000-0xFFFFFFFF]
/*------------------------------------------------------------------------
Purpose: 设计目标
------------------------------------------------------------------------*/
启动TFFS文件系统
启动ftp服务器, 通过它可操作TFFS文件系统, 如应用程序&参数文件
简化应用程序工作, 辅助配置系统组件, 简化初始化过程,
缩小程序大小, 尽量复用bootRom代码
可选程序加载方式: TFFS|网络, 方便调试和程序发布
bootrom程序代码可用于Probe仿真和Flash写入
bootRom加载到RAM中运行, 加载地址0x200000, SP在0x1000
应用程序加载到RAM中运行, 加载地址0x1000, SP[?]
第1片flash写入bootrom, 大概使用400K
第2片flash建立TFFS文件系统, 应用程序文件和参数文件放在文件系统中,
应用程序未加入自己代码时约为1140K
/*------------------------------------------------------------------------
Purpose: bootrom编译环境配置
------------------------------------------------------------------------*/
进入Dos shell
运行torvars.bat配置Dos shell的环境变量
进入相应的BSP目录
make bootrom_uncmp [用于仿真调试, #define RAM_SIM]
make bootrom_unmcp.hex [用于Flash写入,#undef RAM_SIM]
/*------------------------------------------------------------------------
Purpose: 与应用程序的配合
------------------------------------------------------------------------*/
在config.h中为应用程序添加必要的组件, 删除冗余组件[!!!!!已去除cache enable]
!有些组件不能通过这种方式删除, 应用工程会自动添加
!虽#undef USER_D_CACHE_ENABLE, 应用工程其值为TRUE,
5272没有data cache, 影响网络, 需手动修改
应用工程会自动添加bootRom中源代码文件
!ftpdlib.c未自动加入, 需手动
进入应用程序后, TFFS加载点消失, 需在usrAppInit后重用usrTffsConfig()挂入
ftp和telnet服务器会由系统启动
/*------------------------------------------------------------------------
Purpose: 应用程序开发环境配置
------------------------------------------------------------------------*/
1. 安装tornado for cf 2.1
2. 利用/mfc5272 bootrom/目录, 将些文件复制到新安装的tornado目录下
bootrom.bin为bootrom执行影像, 用于Flash写入
将allxxxx/和bspxxxx/目录复制到\target\config\下
将tffsConfig.c复制到\target\src\drv\tffs\下
3. 修改库target\lib\libMCF5200gnuvx.a,删除ftpdlib.o
需要使用torvars配置arcf的路径
arcf -d libMCF5200gnuvx.a ftpdLib.o
注意目标模块名区分大小写
4. 从bspxxxx上创建应用程序工程
需手动加入target\config\bspxxxx\ftpdlib.c到工程中
5. application init组件
程序调试时去除
程序发布时加入
6. 在vxworks的编译规则中加入应用代码的头文件目录
如: -Ie:/dsxxxx/include
7. 主机IP设置和bootline一致
若通过网络加载调试, 可在主机启动tornado自带ftp server
在user/rights窗口添加用户, 用户名和密码应和bootline一致
设置home目录, 为安装tornado的盘符, 如D:\
工程名/目录名一致, 设为wpjcf与bootline一致
8. targetserver配置
选择wdbrpc
backend: 填入target的ip地址, 与bootline一致
core file: 指向工程目录下/default/vxworks
9. 调试时, 建议都使用网络加载
需要删除tffs下vxworks执行程序, 否则会加载tffs上的程序运行
删除后, 系统会加载tffs程序失败后, 自动从主机上网络加载
另外也可以进入boot, 强制用"#"命令从网络加载
参考相关描述
/*------------------------------------------------------------------------
Purpose: Vision Click环境配置&使用[7.10A]
------------------------------------------------------------------------*/
1. 关闭Welcome to visionClick对话框, 不习惯快速方式
用open project file[F12]激活project/load对话框,
在load option tab设置AB, BDX文件的路径, 如:
D:\TornadoCF\target\config\bspxxxx\vxworks.ab
D:\TornadoCF\target\config\bspxxxx\vxworks.bdx
在project config tab, 选择类似的工程进行修改
填写ab, bdx文件的路径, 以及bootrom源代码的搜索路径
reset symbol = romInit
microproccecer = MFC5272
target control = visionProbe
RTOS = vxworks
MHZ = 66MHZ
sim register file = 设置CPU寄存器的初始值文件, 需要手动编辑
start stack = 0x200000
end stack = 0
配置完成后点击OK进入调试模式
2. convert使用
生成仿真调试用的ab, bdx文件
input module = D:\TornadoCF\target\config\bspxxxx\bootrom_uncmp
symbol file = D:\TornadoCF\target\config\bspxxxx\vxworks.ab
obj module = D:\TornadoCF\target\config\bspxxxx\vxworks.bdx
生成Flash写入的bin文件
input module = D:\TornadoCF\target\config\bspxxxx\bootrom_uncmp.hex
bin file = D:\TornadoCF\target\config\bspxxxx\bootrom.bin
from = 0xFFC00000 [CS0-Flash的基地址]
to = 0xFFFFFFFF [足够大就行]
3. 下载程序调试
用reset, load target&symbol, set pc[F11]
visionClick会安装配置下载程序, 进入调试
4. Flash写入
open Flash programming windows
Flash file name = D:\TornadoCF\target\config\bspxxxx\bootrom.bin
Programming alogrithm = AMD 29F160xB ( 1024 x 16 ) 1 Device
Flash的算法在Probe上, 需要连接probe才能看见Flash列表
base addr = 0xFFC00000, erase all checked
ram space: start=0, size=9820 [?有个缺省大小, ram位置?]
/*------------------------------------------------------------------------
Purpose: Probe仿真和写Flash程序的差别
------------------------------------------------------------------------*/
config.h的159行
添加宏定义RAM_SIM以区分仿真和flash程序
#define RAM_SIM /*用于Probe仿真调试*/
#undef RAM_SIM /*用于flash写入*/
rominit.s的284行
仿真直接使用romStart的RAM地址跳转,而不用ROM_TEXT_ADRS偏移
movel #_romStart,a0
#ifndef RAM_SIM
subl #_romInit,a0
addl #ROM_TEXT_ADRS,a0
#endif
movel d7,a7@- /* push start type */
jsr a0@
bootinit.c的252行
仿真时跳过从ROM复制代码到RAM的步骤.
#ifndef RAM_SIM
((FUNCPTR)ROM_OFFSET(copyLongs)) (ROM_TEXT_ADRS, (UINT)romInit,
ROM_COPY_SIZE / sizeof (long));
#endif
bootInit.c
为了在visionClick看见源代码
产生复制文件bootInit_uncmp.c
Makefile:
为了在visionClick看见源代码
ADDED_CFLAGS = -g
/*------------------------------------------------------------------------
Purpose: TFFS驱动
------------------------------------------------------------------------*/
bootconfig.c:bootCmdLoop:开始
将下面这段代码从tffsLoad()移到bootCmdLoop()的起始处
以保证在各种bootline设置下,都会加载TFFS
if (tffsDrv () != OK)
printf ("tffsDrv fail!.\n");
printf ("Attaching to TFFS... ");
dosFsInit (NUM_DOSFS_FILES); /* initialize DOS-FS */
if (usrTffsConfig (0, 0, "/DSxxxx/vxworks") == ERROR)
printf ("usrTffsConfig failed.\n");
printErr ("done.\n");
bootconfig.c:bootCmdLoop:switch [!!!!!#命令改为网络加载, 与x86体系兼容]
添加tffs格式化和tffs加载命令
case ''''z'''': /* tffs format */
if( tffsDevFormat(0,0) != OK )
printErr ("tffsDevFormat fail!.\n");
break;
case ''''#'''': /* tffs boot */
if (tffsLoad (0, 0, "/DSxxxx/vxworks", &entry) == OK)
{
go (entry);
}
else
{
taskDelay (sysClkRateGet ()); /* pause a second */
reboot (BOOT_NO_AUTOBOOT); /* something is awry */
}
break;
bootconfig.c:autoboot()
先从TFFS加载应用程序, 不成功再从网络加载
if (tffsLoad (0, 0, "/DSxxxx/vxworks", &entry) == OK)
go (entry); /* ... and never return */
else
{
printf ("Can''''t load boot file from TFFS!!\n");
printErr ("\nError loading file: errno = 0x%x.\n", errno);
taskDelay (sysClkRateGet ()); /* pause a second */
}
config.h
引入TFFS相关的各种组件
参考相关描述
sysTffs.c
引入自定义MTD函数, 定义Flash地址和容量
参考相关描述
lv160Mtd.c
配置FLFlash参数, 填写erase, write, map回调函数
参考相关描述
ftpdlib.c
配置登录路径, 以操作TFFS文件系统
参考相关描述
tffsConfig.c
在原目录下, 修改添加自定义MTD到mtdTable[]
FLStatus lv160MTDIdentify(FLFlash vol);
MTDidentifyRoutine mtdTable[] = /* MTD tables */
{
#ifdef INCLUDE_MTD_LV160
lv160MTDIdentify,
#endif
/*------------------------------------------------------------------------
Purpose: 网络初始化分离
------------------------------------------------------------------------*/
从bootLoad()分离出网络初始化
添加int netInit(char * bootString)函数
将bootLoad中相关变量定义,网络初始化移入netInit()中,保留网络加载代码
不用作大修改, 只需在起始处加入定义
BOOT_PARAMS params;
并加入bootline解析代码
/* interpret boot command */
if (usrBootLineCrack (bootString, ¶ms) != OK)
return (ERROR);
netInit中会使用bootline中的网络设备名和号
bootconfig.c:bootCmdLoop:开始
加入网络初始化调用netInit, 需放在usrBootLineInit之后
if( netInit(BOOT_LINE_ADRS) == ERROR )
printf ("netInit failed.\n");
config.h:bootline:
主机IP地址[h],登录主机ftp服务器的用户名[u],密码[pw]
参考相关描述
/*------------------------------------------------------------------------
Purpose: 目标机FTP服务启动
------------------------------------------------------------------------*/
目标机FTP服务用来下载应用程序到TFFS
bootconfig.c:bootCmdLoop:netInit后
用缺省端口号启动ftp服务
在ftpdlib.c指定缺省目录,应用程序中也可用
缺省为匿名登录, 没有密码
#ifdef INCLUDE_FTP_SERVER
if( ftpdInit(0,0) == ERROR)
printf ("ftpdInit failed.\n");
#endif
ftpdlib.c
参考\TornadoCF\target\unsupported\src\netwrs\ftpdlib.c
987: /*ioDefPathGet (pSlot->curDirName);*/
988: strcpy(pSlot->curDirName,"/DSxxxx/");
设置ftp的登录目录, 以操作TFFS文件系统
不使用ioDefPathSet, 应用程序也可使用
必须为/DSxxxx/, 不能为/DSxxxx
库操作:
需要删除库自带的ftpdlib.o, 以引入ftpdlib.c
arcf -d libMCF5200gnuvx.a ftpdLib.o
注意模块名区分大小写
/*------------------------------------------------------------------------
Purpose: Watchdog&运行灯驱动
------------------------------------------------------------------------*/
清看门狗使用pa14, 运行灯使用pa8
bootconfig.c的1153行
将Watchdog&运行灯的周期触发放在tRoot任务中
缺省时,tRoot任务启动tBoot任务后退出
while(1){
taskDelay (sysClkRateGet()/4); /*延时0.25s*/
*M5272_GPIO_PADAT(SIM_BASE) = (1<<14)+(1<<8);
taskDelay (sysClkRateGet()/4);
*M5272_GPIO_PADAT(SIM_BASE) = 0;
}
syslib.c的380行
*M5272_GPIO_PADDR(SIM_BASE) = (1<<14)+(1<<8);
端口A的初始化放在sysBusInit()中, 参考硬件配置描述
/*------------------------------------------------------------------------
Purpose: BOOTLINE修改&启动应用程序方式
------------------------------------------------------------------------*/
网络加载:
#define DEFAULT_BOOT_LINE \
"motfec(0,0)host:/tornadocf/target/proj/wpjcf/default/vxWorks " \
"h=192.166.0.3 e=192.166.0.2 u=dsxxxx pw=dsxxxx tn=vxtarget"
TFFS加载
#define DEFAULT_BOOT_LINE \
"tffs=0,0(0,0)host:/DSxxxx/vxworks " \
"h=192.166.0.3 e=192.166.0.2 u=dsxxxx pw=dsxxxx tn=vxtarget"
使用网络DEFAULT_BOOT_LINE, 简化网络初始化代码修改, 应用程序也使用
自动启动先从TFFS加载, 失败后正常按bootline网络加载
#命令强制从TFFS加载, 不理会bootline设置
/*------------------------------------------------------------------------
Purpose: 串口2加载TTY
------------------------------------------------------------------------*/
sysLib.c:sysBusInit()
将端口D的相关管脚初始化串口2使用
*M5272_GPIO_PDCNT(SIM_BASE) = 0x000002AA;
config.h
重定义CONSOLE_TTY, CONSOLE_TTY在configAll.h中定义为0
#undef CONSOLE_TTY
#define CONSOLE_TTY 1 /* console channel */
/*------------------------------------------------------------------------
Purpose: ALL目录下的修改
------------------------------------------------------------------------*/
bootConfig.c
作了大量修改, 细节参考各专题和文件修改描述
主要是加载TFFS文件系统, 开关狗&运行灯,
分离网络初始化和网络加载, 启动ftp服务
分离TFFS初始化和TFFS加载
添加TFFS格式命令和网络启动命令, 修改@命令为固定TFFS启动
修改自动加载启动,先TFFS启动, 若失败则网络启动
bootInit.c
仿真时跳过从ROM复制代码到RAM的步骤.
参考仿真程序设置
usrConfig.c的306行[?是否有必要]
修改系统时钟的频率, 由60ticks/sec改为100ticks/sec
sysClkRateSet (100);
/*------------------------------------------------------------------------
Purpose: ALL目录下bootconfig.c的修改
------------------------------------------------------------------------*/
240: #define TIMEOUT 3 /* number of seconds before auto-boot */
将自启动等待时间由7秒改为3秒
1007: usrRoot()[tRoot]:
sysClkRateSet (100); /* set system clock rate */
修改系统时钟的频率, 由60ticks/sec改为100ticks/sec
1153: usrRoot()[tRoot]:
/*清看门狗[pa14]&运行灯[pa8]*/
参考相关描述
1213: bootCmdLoop()[tBoot]:
/*初始化加载TFFS*/
参考相关描述
1227: bootCmdLoop()[tBoot]:
/*初始化加载网络和FTP服务器*/
参考相关描述
1330: bootCmdLoop()[tBoot]:
case ''''z'''': /* tffs format */
添加tffs格式化命令, 调用tffsDevFormat(0,0)
参考相关描述
1335: bootCmdLoop()[tBoot]:
case ''''#'''': /* tffs boot */
添加tffs加载命令, 固定从tffs加载应用程序, 不管bootline设置
参考相关描述
1541: autoboot()
先从TFFS加载应用程序, 不成功再从网络加载
参考相关描述
1597: "#", "- tffs boot",
1598: "z", "- tffs format",
bootHelp()中填写添加命令的帮助描述
1695-1716:
1944-2349:
从bootLoad()分离出网络初始化
参考相关描述
3041: tffsLoad()
tffsLoad()不初始化TFFS, 分离到bootCmdLoop()中, 直接加载应用程序
参考相关描述
/*------------------------------------------------------------------------
Purpose: BSP目录下的修改
------------------------------------------------------------------------*/
Makefile:
修改TARGET_DIR,VENDOR,BOARD定义
修改CONFIG_ALL指向ALL目录
添加调试编译选项-g
添加附加目标文件
根据启动ROM地址修改ROM_TEXT_ADRS,set-start
config.h
修改DEFAULT_BOOT_LINE
根据SDRAM容量设置LOCAL_MEM_SIZE
设置ROM基地址和容量
设置CPU片上RAM基址, 防止与SDRAM地址范围重叠
将console定位到串口2
包括TFFS文件系统组件, 网络组件
为应用程序定义组件, 根据BSP创建的工程不用进行组件配置
RomInit.s
添加CS1-FLASH2的片选配置
扩展RAM片选容量, 由缺省的4M改为16M
仿真直接使用romStart的RAM地址跳转
sysLib.c
端口A初始化, 看门狗&运行灯输出
串口2管脚初始化
ftpdlib.c
启动目标机bootrom的ftp服务
添加\TornadoCF\target\unsupported\src\netwrs\ftpdlib.c到BSP目录
参考相关描述
sysTffs.c
参考\TornadoCF\target\src\drv\tffs\sockets\mv177-sysTffs.c
更名为sysTffs.c添加到Bsp目录, 少量修改
参考相关描述
lv160Mtd.c
参考\TornadoCF\target\src\drv\tffs\amdmtd.c
更名为lv160Mtd.c添加到Bsp目录, 较多修改
参考相关描述
/*------------------------------------------------------------------------
Purpose: BSP目录下Makefile的修改
------------------------------------------------------------------------*/
27: TARGET_DIR = dsxxxx
28: VENDOR = !!!
29: BOARD = dsxxxx
31: CONFIG_ALL = ..\allxxxx
将缺省all的文件复制到allxxxx目录, 在allxxxx目录下作自己的修改
修改CONFIG_ALL定义, 指向自己的ALL目录
32: ADDED_CFLAGS = -g
为了在visionClick中看见源代码, 添加调试编译选项-g
33: MACH_EXTRA = sysTffs.o lv160mtd.o ftpdlib.o
将新加入BSP目录下的源文件, 编译入bootrom影像
加入相应的目标文件名, make会自动识别依赖关系,并编译入程序
根据该BSP创建工程时, 这几个附加模块会自动加入
41: ROM_TEXT_ADRS = ffc00008 # ROM entry address
根据ROM地址设置入口地址, 为ROM地址加8
前8字节由SP, PC两指针占据
61: NO_VMA_FLAGS = --ignore-vma --set-start=0xffc00000 \
64: VMA_FLAGS = --ignore-vma --set-start=0xffc00000
根据ROM地址设置set-start, 以生成绝对地址影像
/*------------------------------------------------------------------------
Purpose: BSP目录下config.h的修改
------------------------------------------------------------------------*/
#define DEFAULT_BOOT_LINE \
"motfec(0,0)host:/tornadocf/target/proj/wpjcf/default/vxWorks " \
"h=192.166.0.3 e=192.166.0.2 u=dsxxxx pw=dsxxxx tn=vxtarget"
主机IP地址[h],登录主机ftp服务器的用户名[u],密码[pw]
DEFAULT_BOOT_LINE使用网络加载, 可以简化网络初始化
而TFFS初始化相对简单, 少量代码就可以配置启动, 参考相关代码
64: #define LOCAL_MEM_SIZE 0x01000000 /* amine:16M, 4Meg memory is default */
根据SDRAM容量设置LOCAL_MEM_SIZE
73: #define ROM_BASE_ADRS 0xffc00000 /* amine:ffe, base address of ROM */
根据片选参数设置ROM基地址
77: #define ROM_SIZE 0x00200000 /* amine:2M, 1Meg ROM space */
根据Flash存储器大小配置ROM容量, 只是bootrom程序调入RAM用
应用程序从文件系统加载elf文件, 在RAM中重定位
84: #define INTERNAL_SRAM_BASE 0x20000000 /*amine:0x400000, base of internal SRAM */
设置CPU片上RAM基址, 防止与SDRAM地址范围重叠
117: #undef CONSOLE_TTY
118: #define CONSOLE_TTY 1 /* console channel */
缺省console定位在串口1上, 重定位到串口2上
159: #undef RAM_SIM /*用于Probe仿真调试*/
定义区分Probe仿真和Flash写入
162:
#define INCLUDE_TFFS
#define INCLUDE_MTD_LV160
#define INCLUDE_SHOW_ROUTINES /* optional */
#define INCLUDE_DOSFS /*DOS filesystem backward-compatibility*/
#define INCLUDE_CBIO /*CBIO (Cached Block I/O) Support, cbioLib*/
#define INCLUDE_DOSFS_CHKDSK /*DOS File System Consistency Checker*/
#define INCLUDE_DOSFS_FAT /*DOS File System FAT12/16/32 Handler*/
#define INCLUDE_DOSFS_FMT /*DOS File System Volume Formatter*/
#define INCLUDE_DOSFS_MAIN /*DOSFS2 File System Primary Module*/
#define INCLUDE_DISK_CACHE /*Disk Cache Handler*/
#define SELECT_DOSFS_DIR /*DOS File System Directory Handlers*/
#define INCLUDE_DOSFS_DIR_FIXED /*DOS File System Old Directory Format Handler*/
#define INCLUDE_DOSFS_DIR_VFAT /*DOS File System VFAT Directory Handler*/
#define INCLUDE_POSIX_CLOCKS /*POSIX clocks*/
为加载TFFS, 包括相关的系统组件
INCLUDE_MTD_LV160为自定义, 包括lv160Mtd.c中回调函数
依赖组件可以从工程组件配置时得到, 有些可能不是必须
179: #define INCLUDE_FTP_SERVER
加载ftp服务器的组件
183:
#define INCLUDE_DEBUG
#define INCLUDE_SHELL
#define INCLUDE_CPLUS_DEMANGLER
#define INCLUDE_LOADER
#define INCLUDE_HW_FP_SHOW
#define INCLUDE_TASK_SHOW
为应用程序加载target debugging, 使target shell具备部分调试功能
191:
#define INCLUDE_STANDALONE_SYM_TBL
#define INCLUDE_SYM_TBL_INIT
#define SELECT_SYM_TBL_INIT
为应用程序加载built-in符号表, 方便target shell调试
会增加应用程序的大小, 可只在开发中使用, 发布程序时可去掉
195: #define INCLUDE_TELNET
使应用程序可以加载telnet服务器
196:
#undef WDB_COMM_TYPE
#define WDB_COMM_TYPE WDB_COMM_END /* default path is the network */
#define INCLUDE_WDB_SYS /*WDB_COMM_NETWORK不支持系统调试*/
更改WDB的接口, 以支持应用程序的system调试
200:
#undef INCLUDE_BOOTP /* bootp */
#undef INCLUDE_PROXY_CLIENT /* proxy arp client (Slave Board) */
#undef INCLUDE_TFTP_CLIENT /* tftp client */
#undef INCLUDE_NET_HOST_SETUP
#undef INCLUDE_NET_REM_IO
#undef INCLUDE_ARP_API
#undef INCLUDE_HOST_TBL
去掉应用程序一些无用组件, 以减少程序大小[是否无用尚待确认:)]
有些组件不能去除, 创建工程时会自动添加
/*------------------------------------------------------------------------
Purpose: BSP目录下RomInit.s的修改
------------------------------------------------------------------------*/
174行:
添加CS1-FLASH2的片选配置, 参照CS0的配置,
只需修改变换寄存器名称, 和Flash2的起始地址就行
/* program /CS1 */
movel #(ROM_BASE_ADRS + 0x200000 + \
M5272_CS_CSBR_EBI_1632 + \
M5272_CS_CSBR_BW_WORD + \
M5272_CS_CSBR_ENABLE),d0
movel d0,M5272_CS_CSBR1(SIM_BASE)
movel #(M5272_CS_CSOR_BAM_2M + \
M5272_CS_CSOR_WS(5)),d0
movel d0,M5272_CS_CSOR1(SIM_BASE)
215行:
扩展RAM片选容量, 由缺省的4M改为16M
movel #(M5272_CS_CSOR_BAM_16M + \
M5272_CS_CSOR_WS(0x1f)),d0
movel d0,M5272_CS_CSOR7(SIM_BASE)
284行
仿真直接使用romStart的RAM地址跳转,而不用ROM_TEXT_ADRS偏移
参考仿真程序设置
/*------------------------------------------------------------------------
Purpose: BSP目录下sysLib.c的修改
------------------------------------------------------------------------*/
sysBusInit()
381: /*清看门狗[pa14]&运行灯[pa8]定义为输出*/
382: *M5272_GPIO_PADDR(SIM_BASE) = (1<<14)+(1<<8);
sysBusInit()
串口2管脚初始化, 用串口2为console
401: *M5272_GPIO_PDCNT(SIM_BASE) = 0x000002AA;
/*------------------------------------------------------------------------
Purpose: BSP目录下sysTffs.c的修改
------------------------------------------------------------------------*/
参考\TornadoCF\target\src\drv\tffs\sockets\mv177-sysTffs.c
110: #define INCLUDE_MTD_LV160
包括自己的MTD代码, undef其他类型MTD
121: #undef INCLUDE_TFFS_BOOT_IMAGE /* include tffsBootImagePut() */
boot image与TFFS使用不同Flash芯片, 此功能不需要
122: #define FLASH_BASE_ADRS (0xFFE10000)
123: #define FLASH_SIZE (0x001F0000)
根据Flash地址和容量设置, flash地址为0xFFE00000,
跳过前面64K不规则扇区, 简化mtd代码编写
rfaWriteProtect(), rfaWriteEnable()
屏蔽这两函数的操作代码, 使其为空函数
/*------------------------------------------------------------------------
Purpose: BSP目录下ftpdlib.c的修改
------------------------------------------------------------------------*/
参考\TornadoCF\target\unsupported\src\netwrs\ftpdlib.c
987: /*ioDefPathGet (pSlot->curDirName);*/
988: strcpy(pSlot->curDirName,"/DSxxxx/");
设置ftp的登录目录, 以操作TFFS文件系统
不使用ioDefPathSet, 应用程序也可使用
必须为/DSxxxx/, 不能为/DSxxxx
/*------------------------------------------------------------------------
Purpose: BSP目录下lv160Mtd.c的修改
------------------------------------------------------------------------*/
参考\TornadoCF\target\src\drv\tffs\amdmtd.c
参考Flash手册的命令码, 进行修改,
16位端口的命令地址应该按手册命令地址*2
该文件修改较多, 已改得面目全非, 而且与Flash芯片型号相关,
与参考文件无法对照[不太满意, 有功夫重写:(]
下面就作原则性描述:
static void FAR0 * lv160MTDMap(FLFlash *vol, CardAddress addr, int inter)
{
UINT32 ret;
ret = 0xFFE10000 + addr;
return (void FAR0 *)ret;
}
重写map函数, 将指针传回回调结构
系统缺省的map函数, 返回地址会跳跃出错
对直接映射在CPU地址空间的Flash存储器, 这个函数很简单.
static FLStatus lv160MTDWrite(FLFlash vol, CardAddress address,
const void FAR1 *buffer, int length, FLBoolean overwrite)
填写write函数,与Flash芯片相关, 没什么好说
static FLStatus lv160MTDErase(FLFlash vol, int firstErasableBlock, int numOfErasableBlocks)
填写erase函数,与Flash芯片相关, 需赋值erasableBlockSize设置块大小
TFFS缺省虚拟块大小为64K, 小扇区Flash会连续擦除多个块
FLStatus lv160MTDIdentify(FLFlash vol)
vol.interleaving = 1;
flSetWindowBusWidth(vol.socket,16);/* use 16-bits */
flSetWindowSpeed(vol.socket,120); /* 120 nsec. */
flSetWindowSize(vol.socket,(0x200000-0x10000) >> 12);
跳过扇区不规则的前64K空间
vol.chipSize = (0x200000-0x10000); /* 2M*/
vol.noOfChips =0x1; /*one chip.*/
vol.erasableBlockSize = 0x10000; /* 64k bytes.*/
vol.flags |= SUSPEND_FOR_WRITE;
vol.write = lv160MTDWrite;
vol.erase = lv160MTDErase;
vol.map = lv160MTDMap;
/*------------------------------------------------------------------------
Purpose: 未尽事宜
------------------------------------------------------------------------*/
TODO: 修改ftpdlib.c代码, 以添加用户和密码
TODO: 应用程序网络会死, 可能与USER_D_CACHE_ENABLE有关
TODO: 添加TFFS低级格式化命令,tffsDevFormat不象想像的彻底
/*------------------------------------------------------------------------
Purpose: 疑难杂症
------------------------------------------------------------------------*/
SDRAM容量设为16M时, romStart中清零4M-16M时出现系统崩溃
fillLongs ((UINT *)((UINT)romInit + ROM_COPY_SIZE),
((UINT)SYS_MEM_TOP - ((UINT)romInit + ROM_COPY_SIZE))
/ sizeof(long), 0);
现暂时设LOCAL_MEM_SIZE为8M
visionClick中不能看见romInit.s文件的源代码
visionClick中不能看全c文件的源代码,只能看见前面部分
Makefile中TARGET_DIR作用?
根据BSP创建的工程, 未包括ftpdlib.c, 需要手动加入?
在config.h中已#undef USER_D_CACHE_ENABLE,
但是创建工程中值为TRUE, 导致应用程序网络死?
有些组件不能在config.h中undef掉, 创建工程后又自动添加?
每次写Flash需要重新上电Probe和目标机?
系统自带的MTD的map函数返回Flash地址不正确, 会间隔跳过一些地址?
VisionClick启动时和MS office冲突?
应用程序网络死, 可能与cache有关, 去掉USER_D_CACHE_ENABLE也不行?
/*------------------------------------------------------------------------
Purpose: 经验教训
------------------------------------------------------------------------*/
当TFFS调试遇问题时, 可以sysTffs.c的回调函数中打印输出信息, 帮助调试.
在已有TFFS的Flash上使用tffsDevFormat, 并不会擦除所有扇区建立TFFS.
删除TFFS文件时, 会调用MTD的Erase函数.
即使不使用12V擦除Flash, 也不能#undef SOCKET_12_VOLTS[flcustom.h]
否则连tffsDrv()调用会失败, 因为VppOn, VppOff回调指针未填写
[这个问题折腾了我一天:(]
tffsDevFormat格式化Flash时, 会回调MTD的erase, write, read, map
有函数错误就会失败
tffsDrv()和tffsDevFormat()失败后, errno为0, 不能帮助辨识错误
定位错误需要在各回调函数输出信息
tffsDevCreate必须在tffsDevFormat()格式化后的Flash创建
tffsDrv()成功后, 就可以调用tffsDevFormat(), 而不用创建块设备和加载Dos文件系统
系统自带的MTD的map函数返回Flash地址不正确, 会间隔跳过一些地址
需要重写回调函数, 其实很简单, 返回Flash地址加偏移就行
不能使用window.baseaddr, 而需要使用与sysTffs.c中一致的FLASH_BASE_ADRS
因为map调用可能window.baseaddr未初始化, 会引起系统崩溃
[这个问题折腾了我三天, 郁闷死拉:(]
库中所带的ftpdlib.o, 为老式ftp服务器,
用ftp工具连接后, 不能看见文件列表, 但是可上传文件
用dos shell登录后, 能看见文件列表
需要使用\TornadoCF\target\unsupported\src\netwrs\ftpdlib.c, 参考相关描述
应用程序调试时, 不能直接运行usrAppInit(),
调试器连接后, 可由target shell或调试器运行
[align=right][color=#000066][此贴子已经被作者于2003-1-9 15:47:02编辑过][/color][/align]
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |