已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
引用 cccyl:
哈哈,这个不错!玩出水平了,够牛逼!


KC-LS1u开机启动程序源码和ROM文件.
V1.0版本(不建议使用):

attachment icon KC-LS1u开机启动程序.rar 399.37KB RAR 80次下载
V1.1版本(可以不插4片VGA):

attachment icon KC-LS1u开机启动程序V1.1.rar 399.81KB RAR 92次下载


把开机启动程序ROM二进制文件烧到27c020, 然后装上... 从此就可以告别烧写器/编程器了~


开机启动程序说明:
开机启动程序的作用是-->在上电之后自动从外部存储器(TF/SD内存卡)加载程序数据到内存, 然后执行这个加载进来的程序;

1. 在内存卡根目录新建两个txt文本, "KC_LS1u_boot_0.txt"  和 "KC_LS1u_boot_1.txt" , 内存卡文件系统格式为FAT32;
2. 编辑 "KC_LS1u_boot_0.txt" 这个引导文本, 文本存放的是程序文件的路径, 路径格式为, 设备名称:文件路径,  比如, spi_device0:XXXXXXn,  spi_device0的意思是选择SPI设备0(硬件SPI控制器上面有8根片选信号线, 接"S_CS0" 片选信号的设备会被选中),  XXXXXXn就是根目录下的XXXXXXn二进制程序文件;
3. 插上内存卡, 通电开机, 这时机器会把 "XXXXXXn" 这个文件加载到内存里面并运行;

1.png

在这里, SPI设备0(spi_device0:)  和 SPI设备1(spi_device1:) 作为开机引导的对象,也就是可以接两张内存卡, 两张内存卡的片选信号(CS)分别接硬件SPI控制器的 "S_CS0" 片选信号 和 "S_CS1" 片选信号;

txt引导文本的路径可以写成如下几种格式,文件名称或文件夹名称可以有空格,但是路径前后不能有空格或换行.
spi_device0:XXXXXXn         指定从SPI设备0加载根目录的程序文件
spi_device1:XXXXXXn         指定从SPI设备1加载根目录的程序文件
spi_device_:XXXXXXn         机器会从当前设备加载根目录的程序文件
spi_device0:xx\xxx\xxx\xsads\xs\6768678\67867867fdg\ad\XXXXXXn    指定从SPI设备0加载指定目录的程序文件
spi_device1:xx\xxx\xxx\xsads\xs\6768678\67867867fdg\ad\XXXXXXn    指定从SPI设备1加载指定目录的程序文件
spi_device_:xx\xxx\xxx\xsads\xs\6768678\67867867fdg\ad\XXXXXXn    机器会从当前设备加载指定目录的程序文件

在有两张内存卡的情况下,开机的时候机器会先搜索SPI设备0根目录下的txt引导文本,如果没有找到文本,这时会搜索SPI设备1, 如果SPI设备1的txt引导文本里面路径指定的是SPI设备0(spi_device0:), 那么机器会从SPI设备0搜索程序文件, 也就是引导文本在SPI设备1,程序文件在SPI设备0;
如果txt引导文本里的设备名称写成 "spi_device_:" , 这时机器只会搜索存放这个引导文本的设备, 也就是引导文本在SPI设备0, 机器就在SPI设备0搜索程序文件, 文本在SPI设备1,机器就在SPI设备1搜索程序文件;

注意: 引导文本内容的大小不能超过512字节  


"KC_LS1u_boot_0.txt" 是作为开机时候的引导文本, 那 "KC_LS1u_boot_1.txt" 是干嘛用的~, 是给操作系统启动程序用的,  那么怎么控制呢..
内存地址C00007H是一个系统控制寄存器, 上电复位的时候会全部清0, 注意有两个空出来的"用户位";
bit0的这个用户位是控制开机画面的,  运行开机程序的时候, 程序会判断这个位, 如果为0, 就会出现外星人开机画面, 如果为1, 就不会出现外星人开机画面;
bit4这个用户位是控制txt引导文本的,  当开机程序执行到搜索txt引导文本这一步的时候, 会判断这个位, 如果为0, 就搜索 "KC_LS1u_boot_0.txt",  如果为1, 则搜索 "KC_LS1u_boot_1.txt" ;
2.png


顶楼资料有介绍, 本机有两组ROM, 分别为EPROM和SROM(由SRAM芯片组成), ROM就是装程序(机器码)的麻..
EPROM这组ROM里面的程序是按下开机键的时候, 立刻就运行的, 开机程序就装在这组ROM里面;
SROM这组ROM要先装程序进去, 装完了之后, 再通过硬件切换机制, 让CPU跳到SROM, 执行SROM里面的程序,  当然, CPU也可以跳回EPROM, 执行EPROM里的程序, 那么问题就来了, EPROM装的是外星人开机程序, 跳回去有什么用呢,  ~ -_,- ~ 这个是我觉得设计得比较得意的地方~~~,  由于在SROM里面运行的用户程序是不能读写SROM的, 只有在EPROM运行的程序才可以访问SROM,  那么, 如果现在SROM里面运行的程序想从外部存储器加载一个程序进来运行怎么办呢,
可以这样做,
第1步,修改SPI设备0内存卡的 "KC_LS1u_boot_1.txt" 引导文本, 把这个文本的路径修改为需要启动运行的程序文件的路径;
第2步,往内存地址C00007H这个系统控制寄存器写入0x11, 这时两个用户位都被置1;
第3步,执行 "rom_run;" 语句, 这时CPU会跳到EPROM里面执行程序, 由于bit0和bit4两个用户位被置1, EPROM里面的开机程序将不执行外星人开机画面, 而直接执行 "SROM数据装载服务程序" , 这时程序会搜索 "KC_LS1u_boot_1.txt" 引导文本, 然后按照路径把目标程序文件装载到SROM, 然后运行;
经过上面3个步骤, 已经达到了用户程序加载程序运行的目的;
3.png


假设EPROM和SROM都装有下图所示的程序,将会出现什么现象呢,结果就是CPU在EPROM里面执行到 "rom_run;" 的时候会跳到SROM执行程序,然后CPU在SROM执行到 "rom_run;" 的时候,又会跳回EPROM执行"rom_run;"  然后又跳到SROM执行"rom_run;" 。。。。。。死循环, 切来切去。。
4.png
文号 / 768997

千古风流
名片发私信
学术分 4
总主题 71 帖总回复 1168 楼拥有证书:学者 机友 笔友
注册于 2011-08-12 17:13最后登录 2022-12-22 11:43
主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步

个人简介

暂未填写
文件下载
加载中...
{{errorInfo}}
{{downloadWarning}}
你在 {{downloadTime}} 下载过当前文件。
文件名称:{{resource.defaultFile.name}}
下载次数:{{resource.hits}}
上传用户:{{uploader.username}}
所需积分:{{costScores}},{{holdScores}}下载当前附件免费{{description}}
积分不足,去充值
文件已丢失

当前账号的附件下载数量限制如下:
时段 个数
{{f.startingTime}}点 - {{f.endTime}}点 {{f.fileCount}}
视频暂不能访问,请登录试试
仅供内部学术交流或培训使用,请先保存到本地。本内容不代表科创观点,未经原作者同意,请勿转载。
音频暂不能访问,请登录试试
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

插入资源
全部
图片
视频
音频
附件
全部
未使用
已使用
正在上传
空空如也~
上传中..{{f.progress}}%
处理中..
上传失败,点击重试
等待中...
{{f.name}}
空空如也~
(视频){{r.oname}}
{{selectedResourcesId.indexOf(r.rid) + 1}}
处理中..
处理失败
插入表情
我的表情
共享表情
Emoji
上传
注意事项
最大尺寸100px,超过会被压缩。为保证效果,建议上传前自行处理。
建议上传自己DIY的表情,严禁上传侵权内容。
点击重试等待上传{{s.progress}}%处理中...已上传,正在处理中
空空如也~
处理中...
处理失败
加载中...
草稿箱
加载中...
此处只插入正文,如果要使用草稿中的其余内容,请点击继续创作。
{{fromNow(d.toc)}}
{{getDraftInfo(d)}}
标题:{{d.t}}
内容:{{d.c}}
继续创作
删除插入插入
插入公式
评论控制
加载中...
文号:{{pid}}
加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}
ID: {{user.uid}}