这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » [原创]MFC5272_BOOTROM开发笔记

共12条 1/2 1 2 跳转至

[原创]MFC5272_BOOTROM开发笔记

菜鸟
2003-01-09 19:04:26     打赏
元旦后作了个MFC5272_BOOTROM 花两天整理了个笔记, 不是太完善, 希望对大家有所帮助 错误难免, 希望大家指正 好久没写像样的帖子拉, 惭愧:)



关键词: 原创     MFC5272     BOOTROM     开发     笔记    

菜鸟
2003-01-09 19:05:00     打赏
2楼
/*------------------------------------------------------------------------ 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]

工程师
2003-01-09 20:05:00     打赏
3楼
支持!

菜鸟
2003-01-09 23:39:00     打赏
4楼
好。。。厉害!!![em21][em21]

菜鸟
2003-01-09 23:50:00     打赏
5楼
惭愧惭愧, 脑子不记事, 常写笔记备忘 还望seasoblue兄多多指点:)

菜鸟
2003-01-10 00:50:00     打赏
6楼
多谢鼓励, 我会尽力的, 不敢藏私, 只怕记忆力会每况愈下:)

菜鸟
2005-12-16 18:40:00     打赏
7楼
谢谢老大!

菜鸟
2006-03-26 00:52:00     打赏
8楼
真正的高手

菜鸟
2006-04-03 19:39:00     打赏
9楼

thanks


菜鸟
2006-04-04 01:21:00     打赏
10楼
多谢雷斑竹

共12条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]