一片Norflash上建立bootrom和TFFS文件系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式资源免费分享区
一片Norflash上建立bootrom和TFFS文件系统
开发环境:2410+AM29LV160DB(前 0.5m 存放 bootrom,后 1.5m 建立 TFFS) NorFLash 挂接 bank0 由网络上 sst39vf160 源代码修改而来 主要修改了文件名、命令字序列、加入屏蔽中断、mmu 映射,其他部分改动很少 ①关键问题描述与解决措施 问题描述:在 wshell 中调用 tffsDevFormat -> tffsDevFormat Identify AM29LV160 media.0x2249 shine**********identify ok shine**********lv160MTDErase routine(进入擦除命令后停止) shine**********ret is 100000,call by lv160MTDMap0(此处是我在 map 函数中 增加的打印) Exception number 12: Task: 0x33e18b98 (t17) Instruction prefetch abort Program Counter: 0x200000 Status Register: 0x20000097 value = 0 = 0x0 结果系统进入异常 解 决措施:需要在擦除和写操作中屏蔽中断,因为 Flash 在擦除、写和读 ID 状态时,不能正常读取 Flash 中数据。而 VxWorks 的异常入口位于 Flash 存储 器的开始处,异常发生时不能得到正常的入口指令,会导致系统跑飞。解决这个 问题的最好方法是添加第 2 片 Flash 存储器, 专门用于文件系 统。 (摘自 Amine 的 44B0 调试笔记) ②在 lv160mtd.c 中(把文件名 sst39vf160 改为 lv160mtd.c) 增加如下头文件 # include "intLib.h" /* include intLock() and intUnlock() */ 屏蔽中断函数使用示例: 代码: int Eint_lock_key; int_lock_key = intLock (); /* disable interrupts*/ intUnlock (int_lock_key); /* restore interrupt enable setting*/ 代码:
嵌入式资源免费分享区
#define #define #define #define #define #define #define #define #define #define
SETUP_ERASE 0x80 SETUP_WRITE 0xa0 READ_ID 0x90 SECTOR_ERASE 0x30 BLOCK_ERASE 0x50 READ_ARRAY 0xf0 UNLOCK_1 0xaa UNLOCK_2 0x55 UNLOCK_ADDR1 0x555 UNLOCK_ADDR2 0x2aa+ /*设备 ID*/
#define AM29LV160_DEID 0x2249 ③在 Makefile 中 加入 代码: MACH_EXTRA= lv160mtd.o
④在 sysTffs.c 中 #undef INCLUDE_TFFS_BOOT_IMAGE 这里我们不用 sysTffsFormat 函数, 直接指定地址, tffsDevFormat 函数即可。 用 ⑤在 sysLib.c 中 修改如下映射 代码: { (void *) (ROM_BASE_ADRS), (void *) (ROM_BASE_ADRS), ROUND_UP (ROM_SIZE_TOTAL, PAGE_SIZE), VM_STATE_MASK_VALID|VM_STATE_MASK_WRITABLE| VM_STATE_MASK_CACHEABLE, VM_STATE_VALID | VM_STATE_WRITABLE | VM_STATE_CACHEABLE_NOT }, 其中 ROM_BASE_ADRS 为 0x00000000 ROM_SIZE_TOTAL 为 0x00200000(2m) 调试中的经验总结: ①在没加入屏蔽中断时调用 lv160MTDIdentify 显示如下: Data abort Exception address: 0x200000
嵌入式资源免费分享区
Current Processor Status Register: 0x20000097 定位到 flSetWindowBusWidth 函数,这个定位误导使我走错误的方向,花了一 个星期才走出这个错误 ②mmu 映射 如果出现 printf ("%d: **** communication failed with error %d ****\n",) 形式的输出 则表示 mmu 映射不正确。 如果 shell 启动不了,也有可能是 mmu 映射的问题 ③调试时要在函数的入口加入该函数的打印 如:shine**********lv160MTDErase routine 表示进入到 lv160MTDErase 函数