16 Star 76 Fork 30

勤为本 / OpenLoongsonLib1c

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
BSD-3-Clause

龙芯1c库

这是一个封装了龙芯1C300B各种外设操作的库(类似于STM32的库),不断完善中...
龙芯1b和1c有很多相似和通用的地方,“龙芯1B库”和“龙芯1C库”可以相互借鉴,双击进入龙芯1B库的git

为啥要做这个呢

目前龙芯1c能跑linux和RT-Thread,可是点个灯就难倒不少龙芯爱好者,因为对linux和RT-Thread不熟悉。
我认为linux和实时系统RT-Thread属于高级应用,做产品时才会用到。很多在校的童鞋可能连c语言都还不是很熟悉,你叫他去看linux和RT-Thread源码是不是有点太难为他了,呵呵。
回归初心,裸机程序是最合适的。为了进一步降低门槛,将各种外设封装成龙芯1c库。虽说最初是为了方便初学者,其实这个龙芯1c库不仅可以用于裸机编程,也可以用于各种实时系统。

愿景

通过将“龙芯1c库”和“最小系统板”开源,来促进推动龙芯1c的推广。让技术不再是“问题”,让大家可以把精力集中在市场推广和优化客户体验上。
实际上,“最小系统板”和“龙芯1c库”类似,“龙芯1c库”是每个软件都需要的,“最小系统板”是每块板子都需要的。是龙芯1c的基础软硬件,每个项目都需要用到。开源后可以避免大家重复“造轮子”。

白菜板(裸机编程用的龙芯1c最小系统板)

为啥促进最小系统板开源

本来最初只是参考“stm32库”的思想封装“龙芯1c库”,并开源。随着“龙芯1c库”的逐步完善,软件方已不再是限制推广的主要原因,而硬件方面则成为限制推广的主要原因。
初步想法是将“最小系统板”的原理图和pcb完全开源,像其它流行的开源硬件一样,实现真正意义上的开源。即任何人都可以免费下载原理图和pcb源文件,可以修改,可以直接把pcb拿去打样。以此来降低画板子的难度,同时降低成本。

为啥这里主要讨论裸机编程用的最小系统板

龙芯1c的应用范围还是挺广的,可以跑裸机程序,运行实时系统,跑linux,甚至debian都可以。这里主要讨论跑裸机程序的“最小系统板”,其它的类似。为什么这里主要讨论“跑裸机程序的最小系统板”呢?因为我只能玩点简单的裸机程序啊(呵呵)。
目前(2018年1月)市面上没有专门为裸机程序定制的最小系统板,而跑裸机程序又是入门的首选(相对来说,实时系统和linux门槛较高)。龙芯1c本身的芯片价格相对国外友商的相同性能的芯片很有价格优势。概括来说,市场需要一款价格实惠的龙芯1c的最小系统板,而龙芯1c芯片价格又不贵,完全可以满足市场需求,甚至很有价格优势。目前(2018年1月),龙芯给大众的影响是高大上,敬而远之。希望通过这款跑裸机程序的最小系统板来改变大众对龙芯的认识,龙芯不仅能上得厅堂(卫星,国防军工),下得厨房(大众能买得起的)。

白菜板名字的由来

为了改变大众对龙芯的认识,同时便于在大众市场推广,为此特别取了一个草根,土,俗气的名字——“白菜板”

白菜板的价格

拍脑袋,想了一个价格——99元。(拍脑袋拍出来的,呵呵,仅供参考)

白菜板的初步的大致思路

CPU肯定是龙芯1c,
内存可以用ISSI的SDRAM,
SPI NOR FLASH(用于存放固件)可以用兆易的,
编程器可以用最近(2018年1月)比较流行的沁恒的CH341.
这几个厂商都是国产厂商,并且都是得到市场认可的。如果再加上好的国产的电源芯片,就可以实现整块板子全部国产了。

白菜板的拓展和衍生

白菜板最开始是为了实现低成本的最小系统,为了跑裸机程序而做的。可是白菜板也有很多拓展空间,很容易衍生出其它开发板来。比如可以直接把内存从8M的IS42S16400-7T换为32M的V54C3256164VHI6,两者引脚兼容。并且有个别版本的白菜板出厂就是32M的。
因为白菜板是最小系统板,只需要给白菜板做个底板,就很容易扩展各种功能。比如,在底板上集成nand flash之后就可以跑linux了,也可以把usb接口等都做在底板上。听说有网友已经在做这件事了,最新进展看淘宝,如果做出来了,肯定淘宝上能搜到。

白菜板的焊接

因为白菜板的所有源文件(包括原理图和PCB)都开源了,所以任何人都可以拿去打样。最近(2019年7月)白菜板的主要贡献者李工前段时间做的白菜板又买断货了,并且似乎最近没有再做一批的打算,所以有好几个群友都到嘉立创自己打样,然后手动焊了一两块白菜板来自己用。我也凑了个热闹,也去打样了,尝试着自己手焊白菜板。在焊废了两块后,第三块终于成功了。
本来我也是焊接新手,但我想可能焊接新手的经验可能更适合焊接新手,所以就写了一篇文章《手焊白菜板经验总结》,总结了焊接白菜板的要点、重难点、及解决办法。希望对焊接新手有用。

windows上搭建龙芯1c开发环境

友情提示,龙芯1c库可以在linux下用龙芯官方的交叉编译工具链编译,这里重点讨论在windows上编译,如果需要在linux下编译,可能需要稍微修改下Makefile,具体查看Makefile中的注释。
windows上的交叉编译工具链 CH341A驱动和烧写软件下载地址
windows上搭建龙芯1c开发环境
另外,MIPS官网也有比较新(版本比较高的)交叉编译工具链,也可以用来编译龙芯1c库,并且windows和linux下的都有。MIPS官网的交叉编译工具链下载地址。注意,请选择“MTI Bare Metal Toolchain”下的。由于交叉编译器版本不一样,可能有1c库中有个别地方需要修改。网友“FlyGoat”已经改好了,可以用mips官网的编译器编译,FlyGoat修改后的1c库下载地址,感兴趣的可以试试。

怎样把龙芯1c库移植到一款板子上

目前,git上的源码是在白菜板上测试的,如果需要用在其他板子上,可能需要进行一些必要的修改。比如修改SDRAM参数,修改调试串口的串口号和波特率,等。

查看或修改内存型号

请参考博文【龙芯1c库】换内存芯片后如何修改SDRAM配置(pmon类似)

查看或修改调试串口

一般只需要修改串口基地址和波特率,在上电初始化比较靠前的位置,会初始化串口,方便在汇编中打印调试信息,进入c语言运行环境后,可能会重新初始化调试串口。
具体的源码请查看汇编文件“start.S”和c文件“ls1c_uart.c”。
专门写了一篇博文讲解上电初始化流程,可以去看下【龙芯1c库】上电初始化汇编代码注解(pmon类似)

烧写和启动命令

目前,使用龙芯1c库的裸机程序可以实现自引导,即纯粹的裸机程序,上电后,直接运行裸机程序,不需要pmon引导。如果是这种纯粹的裸机程序,想把它烧写到SPI NOR FLASH中,那么只有EJTAG或者(淘宝上常见的)SPI FLASH编程器

怎样调试程序

使用仿真器在线调试

可能大家习惯了,使用仿真器,在线调试,单步调,按一下键盘上的快捷键,程序走一步,这样感觉踏实、直观。我也觉得使用仿真器在线调试很踏实,直观,不过据我了解,目前(2018年4月)市面上还没有比较便宜又好用的仿真器。以后可能会有,想知道最新情况,就在淘宝搜一下

使用printf打印调试信息

其实,使用printf打印调试信息,也是一种非常常用,并且好用的调试方法。到目前为止(2018年4月)龙芯1c库的全部功能都是使用printf调试出来的。目前(2018年4月),把串口2作为调试串口,只需要把调试串口与电脑的串口相连,就可以在电脑上通过串口软件(比如,secureCRT、串口助手等)查看打印信息。
函数printf()可以打印几乎所有信息(包括寄存器的值),在需要查看某个寄存器值的地方,用printf()打印一下,在执行完到某个流程时,也可以打印一条提示信息。我一般都是在程序的每个流程的关键点上,打印一条信息,这样,可以通过串口打印来判断程序运行情况是否和期望的一样。如果想了解某个流程的更多信息,可以在相应代码中用printf增加一些打印。
我个人是比较喜欢printf这种调试方法的,我认为仿真器单步调试太慢了。我一般在程序中,用printf加好打印,然后上电跑一下,分析打印信息,没问题就收工。

源码目录说明

源码目录包括“app”,“example”和“lib”。
目录“app”是用户放源文件的目录,用户把自己新建的文件放在app目录下,本目录下的内容和具体业务相关,不是龙芯1c通用的。
目录“example”是库的测试函数所在目录,同时这些测试函数也初步演示了怎么使用库提供的接口
目录“lib”是“严格意义上的”龙芯1c库,里面的源码将龙芯1c的寄存器信息封装为一个一个的函数,一般情况下,用户不应该修改该目录的文件
目录“include”是标准库(libc和libm)的头文件所在目录。标准库的用法和linux中一样,使用#include <xxx.h>
目录"libc"是标准c库,里面有常用的字符串相关的处理函数,包括printf
目录“libm”是标准数学库,里面是一些常用的数学函数,比如sqrt,sin,cos等
本来龙芯1c只需要文件夹“lib”中的源码即可,为了演示怎么使用和验证龙芯1c库的功能是否正常,增加了文件夹“example”,后面有需要使用printf,而printf内部会调用很多libc中的字符串处理函数,也会调用libm中的函数,同时字符串处理函数和数学函数也是经常使用到的,所以又增加了文件夹“libc”和“libm”,而文件夹“include”中仅仅存放libc和libm的头文件,在Makefile中把文件夹"include"的路径追加到变量VPATH中,即可在代码中使用#include <xxx.h>的方式调用libc和libm的头文件,所以又增加了文件夹“include”,另外还单独新建了一个文件夹“app”,用于存放用户自己的代码,该文件夹中的代码和具体具体业务相关,就这样文件夹越来越多 ^__^

龙芯1c库与实时系统(RT-Thread、UCOSIII等)

龙芯1c库本身并没有限制,仅仅是把一些常见外设的功能封装为函数而已。所以龙芯1c库即可用于裸机编程,也可以用于实时系统,比如RT-Thread。
目前,网友“风往东吹”把start.S移植到RT-Thread中,实现了RT-Thread自引导,即RT-Thread也可以像裸机程序一样开机就直接运行RT-Thread,不需要pmon或者其它程序来引导。网友“风往东吹”移植好的RT-Thread的下载地址,不知道是否会合入RT-Thread官方的git,具体请移步到github上RT-Thread官方git查看最新情况。

相关资源

勤为本的博客 以博文的形式分享封装龙芯1c库的各个功能的思路和要点
勤为本的淘宝小店 我尝试着用龙芯1C300B做一些小作品,或者移植一些小模块,并挂在店里卖,欢迎大家来逛一逛,谢谢! 最新进展会通过微信公众号推送给大家,欢迎关注我的微信公众号(后面有微信公众号的二维码)
桃李科技自营店 这是白菜板的主要贡献者网友李工的淘宝店铺,可以买到最新版本的白菜板(在不断迭代中)、李工可以提供定制龙芯1c开发板和有偿技术支持。
龙芯1c库的交流qq群“633262684”,勤为本的微信公众号“qin_wei_ben”,欢迎扫一扫关注微信公众号
勤为本微信公众号

Copyright (c) 2016, 简单平安 All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the {organization} nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

简介

类似于STM32库的龙芯1c库(目前只封装了1c的)。 展开 收起
C 等 4 种语言
BSD-3-Clause
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C
1
https://gitee.com/caogos/OpenLoongsonLib1c.git
git@gitee.com:caogos/OpenLoongsonLib1c.git
caogos
OpenLoongsonLib1c
OpenLoongsonLib1c
master

搜索帮助