# OpenLoongsonLib1c
**Repository Path**: radt916/OpenLoongsonLib1c
## Basic Information
- **Project Name**: OpenLoongsonLib1c
- **Description**: 类似于STM32库的龙芯1c库(目前只封装了1c的)。
- **Primary Language**: C
- **License**: BSD-3-Clause
- **Default Branch**: master
- **Homepage**: http://blog.csdn.net/caogos
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 32
- **Created**: 2018-03-07
- **Last Updated**: 2020-12-19
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 龙芯1c库
这是一个封装了龙芯1c各种外设操作的库(类似于STM32的库),不断完善中...
龙芯1b和1c有很多相似和通用的地方,“龙芯1B库”和“龙芯1C库”可以相互借鉴,[双击进入龙芯1B库的git](https://gitee.com/caogos/OpenLoongsonLib1b)
# 为啥要做这个呢
目前龙芯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.
这几个厂商都是国产厂商,并且都是得到市场认可的。如果再加上好的国产的电源芯片,就可以实现整块板子全部国产了。
# windows上搭建龙芯1c开发环境
[windows上的交叉编译工具链下载地址](http://pan.baidu.com/s/1i4YFrCT)
[windows上搭建龙芯1c开发环境](http://blog.csdn.net/caogos/article/details/72621417)
# 查看或修改内存型号
请参考博文[【龙芯1c库】换内存芯片后如何修改SDRAM配置(pmon类似)](http://blog.csdn.net/caogos/article/details/79283060)
# 烧写和启动命令
## 不需要pmon引导的
目前,使用龙芯1c库的裸机程序可以实现自引导,即纯粹的裸机程序,上电后,直接运行裸机程序,不需要pmon引导。如果是这种纯粹的裸机程序,想把它烧写到SPI NOR FLASH中,那么只有EJTAG或者(淘宝上常见的)SPI FLASH编程器
## 需要pmon引导的
当然也可以是基于pmon的,即pmon像引导linux一样引导裸机程序,那么下载和烧写也是和linux类似的,可以通过网口和串口。如下
### 通过网口烧写
下载到内存,从内存中启动,掉电不保存,重启后恢复原样
load tftp://192.168.1.4/OpenLoongsonLib1c
g
每次启动自动从tftp服务器下载裸机到内存,并自动运行,同样掉电不保存,调试时常用这种方式
set al tftp://192.168.1.4/OpenLoongsonLib1c
烧写到flash,正式时使用
mtd_erase /dev/mtd0
devcp tftp://192.168.1.4/OpenLoongsonLib1c /dev/mtd0
每次上电自动从flash加载裸机程序并运行
set al /dev/mtd0
### 通过串口烧写
步骤如下,一定要按照顺序来
1. ymodem base=0x81800000
命令执行后,串口会打印“Waiting for serial transmitting datas”,提示等待传输,然后紧接下面的步骤使用secureCRT传输固件。
2. 通过secureCRT(菜单“传输”->“发送Ymodem”)传输固件到1c,并保存在内存中
3. mtd_erase /dev/mtd0
4. devcp /dev/ram/ymodem /dev/mtd0
这一步是将内存中的固件写到flash
5. set al /dev/mtd0
专门写了一篇文章以图文的形式讲解整个过程,请移步到[用secureCRT通过串口使用Ymodem协议烧写龙芯1c固件到flash](http://blog.csdn.net/caogos/article/details/78433994)
# 源码目录说明
源码目录包括“app”,“example”和“lib”。
目录“app”是用户放源文件的目录
目录“example”是库的测试函数所在目录,同时这些测试函数也初步演示了怎么使用库提供的接口
目录“lib”是库文件的目录,一般情况下,用户不应该修改该目录的文件
目录“include”是标准库(libc和libm)的头文件所在目录。标准库的用法和linux中一样,使用#include
目录"libc"是标准c库,里面有常用的字符串相关的处理函数,包括printf
# 龙芯1c库与实时系统(RT-Thread、UCOSIII等)
龙芯1c库本身并没有限制,仅仅是把一些常见外设的功能封装为函数而已。所以龙芯1c库即可用于裸机编程,也可以用于实时系统,比如RT-Thread。
目前,已将龙芯1c库中一部分接口移植到了RT-Thread,具体请移步到[github上RT-Thread官方git](https://github.com/RT-Thread/rt-thread)查看。
移植龙芯1c库到RT-Thread的步骤很简单,只需要将龙芯1c库中目录“lib”内相关源文件拷贝到RT-Thread的龙芯1c BSP下的目录“libraries”内。
在RT-Thread中使用龙芯1c库中的函数和裸机编程时类似,在需要调用的地方先包含头文件,再调用
# 相关资源
[博客](http://blog.csdn.net/caogos)
龙芯1c库中封装的每个功能都写了测试代码来验证和演示,也写了博文详细描述,测试代码位于目录“example”中,每个用例为一个测试函数,函数main()中依次调用每个测试函数,博文见博客。如果还有疑问或者需要讨论的就加qq群和微信公众号。谢谢!
qq群“633262684”,微信公众号“qin_wei_ben”,欢迎扫一扫关注微信公众号加入
