Score
0
Watch 11 Star 28 Fork 9

勤为本 / OpenLoongsonLib1cCBSD-3-Clause

Join us
Explore and code with more than 2 million developers,Free private repositories !:)
Sign up
类似于STM32库的龙芯1c库(目前只封装了1c的)。 spread retract

http://blog.csdn.net/caogos

Clone or download
Loading...
README.md

龙芯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”,欢迎扫一扫关注微信公众号
勤为本微信公众号

Comments ( 2 )

Sign in for post a comment

C
1
https://gitee.com/caogos/OpenLoongsonLib1c.git
git@gitee.com:caogos/OpenLoongsonLib1c.git
caogos
OpenLoongsonLib1c
OpenLoongsonLib1c
master

Help Search