大家好,我是小麦,这次想和大家分享一下我做一个小项目的一些心得和感悟。

这个项目不是什么很牛逼的大项目,是一个基于全志的一款SOC的项目。中间遇到过不少问题,差点就烂尾了,索性最后坚持下来了。

起源

这次为什么要做这个小项目呢?

因为去年刚学了一下一个开源的EDA软件 —— KiCad。然后为了练一下手,所以就一时兴起打算做一个Linux小板;开始画PCB,买物料,自己焊接,不亦乐乎,不过中间也有很多辛酸。

因为大家知道,一般的SOC,因为产品尺寸有要求,集成度很高,所以通常是BGA封装,另外片外还需要加ddremmc,就是ram和rom了,同样的,这两者往往也是BGA封装,所以焊接难度也很大;

于是我就在想,有没有对我这样的手残党友好一点的方案呢?

然后我找了一段时间,后来想起之前网上老外的一个项目 linux business card的一个项目,看了一下是全志的F1C100S,内置32M的ddr,有lqfpqfn的封装,可以外接spi的nor flash或者从sd进行启动。

QFN封装

LQFP封装

这?简直是手残党的福音啊。

第一版的时候,我用Kicad画好原理图和PCB,还用keyshot很装逼地渲染了一下PCB,虽然效果差强人意,但是自我感觉逼格比之前高了很多;

下面是第一版PCB的效果的视频;

首战失利

不知道为什么脑子抽了一下,直接采购的是qfn封装的芯片,强行给游戏增加了难度;然后买了一个廉价的热风枪(可以吹出300℃—450℃热风的设备);

春节在家是极其简陋的焊接环境,就开干了;

顺便说一下焊锡丝里是含有铅的,这几天手工焊电路板,闻多了,感觉都要提前变成老年痴呆了;

艰苦的环境

实际焊了一些QFN的芯片,感觉也不是很难,先用电烙铁在焊盘上涂上锡,然后用风枪吹一下就好了,后面再补锡,防止有的地方虚焊;

焊好了第一块电路板,只焊好了电源管理部分,还有主芯片,然后问题就来了;

废了

芯片需要三路电源,3.3V,2.5V,1.1V;

3.3V是系统电源,2.5V是给内部DDR供电的,1.1V是IO电源;

然后我测试的时候发现,在焊上主芯片之后,2.5V电源的输出就是0V;

奇怪的是,我把主芯片拆下来,这三路电压输出又恢复正常了,因为我是先把电源部分的电路焊好的,并且测试输出正常之后,才焊的芯片;

我怀疑可能这部分没有焊好,存在引脚的虚焊或者连焊;

之后,我又做了两块板子,发现原来的问题还是存在。

到底是什么问题呢?这期间也有请教了一些硬件方面的大佬,也尝试了很多的测试方法,好几次心灰意冷。

后面又调试了一段时间,没有实质性的进展,决定放弃当前版本。

准备改版;

三块尸体

屡败屡战

中间搁置了一段时间后,重新设计了第二版的PCB,我把原来的PMIC方案换了,参考开源的荔枝派,直接单芯片输出三路3.3V,2.5V和1.1V

顺便板子颜色换成了蓝色,总体感觉比绿色和黑色的阻焊漆更好;

新旧对比

工欲善其事必先利其器,顺便还改善了一下工作环境,接下来就继续战斗吧。第二次次焊起来比第一次顺手多了;

调试PMIC

不过在调试PMIC的时候,使用万用表测量输出电压,不小心把一个地方弄短路了,导致一个电感短到3.3V上,直接烧毁冒烟了。

内心很慌,后来排查了并不是硬件设计上的问题,终于三路输出的电压都正常了,长舒一口气,也算是一个小插曲。

下一步就是烧录固件了,板子接到电脑上,板子是作为usb device,电脑作为host。

板子这边是usb otg的接口(既可以作为device,也可以作为host),usb的引脚一般包括VCC,GND,D+和D-,还有一个usb_id;

usb_id根据引脚的上下拉,来区别当前的工作状态(是host还是device);通常作为usb device时候,这个引脚要进行上拉,作为主机的时候,要进行下拉;

不巧的是,我默认给板子的usb_id下拉了,所以,通过sunxi-tool去枚举usb设备的时候,就出现了错误提示;

错误提示

没有办法,最后经过飞线,可以成功识别到USB设备了;

发现设备

最终焊完的板子,背面贴了一块屏幕;

最终形态

后面,编译了一份uboot,但是烧写的时候又出问题了,提示usb传输错误,这下可把我难道了,心中的猜测:

  1. 硬件的问题,然后把flash的引脚都补锡补了一遍,主芯片的spi接口引脚用烙铁刮了一遍,然后重新补了一下锡,确保没有虚焊和连焊,然后,问题依然没有解决;

  2. 软件的问题,排查了libusb的问题,我先后在Linux上重新安装了这个库,依然没有解决这个问题;顺便在Windows系统重新搭建了测试环境,依然存在问题。

我陷入了困境,并且不知道如何解决这个问题,差点烂尾。

当时想过要放弃:“这个版本如果再不行,这个项目就不搞了”。

然后我安慰自己,再尝试一下别的办法,说不定就解决了。

于是我测试了PMIC的输出,3.3V,这是实际只有3.1V—3.2V左右,然后怀疑:会不会电压太低造成的呢?

抱着疑问,调了一下DCDC的电阻,改变了一下电源的输出,稳定在3.4V左右;歪打正着,经过测试,发现问题就这样解决了,后面工作都比较稳定。

于是可以正常烧录固件了;

烧录成功

系统移植

硬件的坑才是大问题,移植方面因为有不少开源的案例,所以也相对比较轻松;

总结一下是四个步骤;

  • 环境搭建;

  • uboot的移植;

  • linux kernel的移植;

  • 文件系统;

烧录uboot,就是要把程序烧写到flash中,绝大多数都是从 0 地址开始执行;

对于大部分的 SoC 而言,芯片执行其内部的固化 i-bootloader 之后就会从外部的 flash 来执行 bootloader,然后就芯片就会执行我们所烧录的 uboot 了。

这个是uboot正常烧录之后的串口终端输出的log,还没有烧kernel

uboot的log

uboot是芯片最开始会执行的程序,比如x86的电脑的BIOS,差不多的道理;不过芯片内部都会固化一段启动代码,F1C100S也不例外;

uboot启动之后,就要开始启动内核了;

这里简单介绍一下bootargsbootcmd

bootcmd一般都会包含 bootm 或者 bootz 指令 ;

  • bootz:因为kernel和rootfs都保存在flash中,所以要先将他们搬运到ram中;

  • bootm:搬运完之后开始启动内核;

然后根据bootargs这个环境变量,向内核传递参数;

参考如下;

bootargs=console=ttyS0,115200 panic=5 rootwait root=/dev/mtdblock3 rw rootfstype=jffs2

其中

console=ttyS0,115200:表示控制台终端定向到串口0,波特率为115200;

panic=5:表示传递参数错误的时候,程序会进入死循环,并在5秒后重启内核;

rootwait:表示是让内核进入无限等待,因为启动时间无法预估,就让内核无限等待直到启动完成;

root=/dev/mtdblock3:表示文件系统挂载到mtd设备的分区3上;

rw:表示当前文件系统是可读可写的;

rootfstype=jffs2:文件系统类型,在配置内核时选择支持该类型;

kernel启动成功了,但是文件系统也挂载成功了,但是没有成功,提示/bin/sh exists but couldn't execute it

错误提示

用buildroot编译的根文件系统,上面的问题在我努力排查下也顺利解决了,主要是rootfs中的文件没有可执行权限;

成功进入系统的log

点击放大

点击放大

总结

整体过程还是很好玩的,虽然遇到意料之外的问题很虐心,但是问题一个个解决之后,感觉还是很棒,因为做这个东西不需要取悦任何人,自己快乐就行了;所以,劳资屏幕就先不调了。

最后,无论是生活中,还是工作中,难免都会遇到困难和挫折,不要轻易放弃,坚持到最后,一定能成功,共勉!!!

—— The End ——

推荐好文  点击蓝色字体即可跳转

☞ 前几天哪位老哥让我推荐C语言书籍来着?

☞ 被坑10万!竞业协议到底有多少坑?

☞ 一款超级好用的虚拟示波器软件

☞ 一文彻底搞懂C指针!

☞ 一招让你的PCB逼格登月

☞ 那些年我写过的文章

原创不易,欢迎转发、留言、点赞、分享给你的朋友,感谢您的支持!

这个项目差点就烂尾了...相关推荐

  1. 国家电网SAP 烂尾悬疑

    三年前,国家电网信息化工程出台,SAP以20亿元高价蹊跷中标.三年后,该项目不仅推广不利,更落下"用了很痛苦"的评语.这个国内公司仅用1/3价格就可中标的项目,正陷入"烂 ...

  2. 芯片项目烂尾怎么办?国家发改委回应了!

    来源:北京日报客户端 芯片项目烂尾的报道近日引发关注.对此,国家发改委新闻发言人孟玮在今日(20日)上午举行的例行发布会上回应,将会同有关部门强化顶层设计,狠抓产业规划布局,努力维护产业发展秩序. 集 ...

  3. 超级计算机还是超级烂尾?天河一号闲置近1年

    2010年,"天河一号"以每秒2570万亿次的运算速度成为世界最快的计算机(资料图片) 今年6月23日,超级计算机世界500强最新排行榜公布,落户于国家超级计算广州中心的" ...

  4. 迪拜“烧掉800亿”造了座烂尾岛,奇葩建筑惊呆网友:有钱人的世界,我不懂!

    全世界只有3.14 % 的人关注了 爆炸吧知识 来源:普象工业设计小站 天呐!最新消息 阿布扎比酋长国 又发现220亿桶非常规可采石油 让原本富有的国家更加钱上有钱 尤其是它的兄弟国--迪拜 简直&q ...

  5. 给B公司的一些建议(又一篇烂尾的文章)

    感慨:太多太多的悲伤故事,发生在自己身上,发生在自己的身边.因此,为了避免总是走"弯路",走"错误"的道路,最近一直在完善自己的理论模型. 烂尾说明:本文是一篇 ...

  6. 区块链史上的一次冰河世纪,凛冬之下,随处可见的烂尾链

    新闻快讯,来源区视网分享<猪说区块链>栏目 投资需谨慎,片头说我们这个项目有美国航天研发的,我们有区块链溯源做技术支撑,而且去寻找外星人与地球祖源,另外我们有政府支持,大量资金投入,大胆的 ...

  7. 还有多少楼盘陆续烂尾

    烂尾楼是对未完成开发的楼盘的俗称,官方的称呼是问题楼盘,也许是烂尾比较形象吧,大家也就约定俗成,统称为烂尾楼.烂尾楼有个别的,市场再好都有可能出现,开发商操盘不当.资金链断裂.产权纠纷等等都有可能导致 ...

  8. 假如购买的期房不小心烂尾了,那银行贷款是否可以不还了?

    如今房价一路高升,再加上开发商融资难度越来越大,现在很多人都开始打期房的主意.期房不论是对开发商还是对购房者来说都是双赢的,开发商可以以较低的融资成本维持楼盘的开发,提高财务杠杆,而购房者可以较低的价 ...

  9. 《30而已》烂尾,如果这样卖空山茶,顾佳会逆袭

    摘要:让内容走在销售前 <30而已>迎来了大结局,很想给编剧寄刀子.我所期待的顾佳通过空山茶逆袭成为上市公司老总,让许幻山下跪求饶的完美ending并没有出现.反而是顾佳卖空山茶很辛苦.看 ...

最新文章

  1. 普通大学生和大厂的距离有多长?
  2. Hyper-V vNext新的虚拟机配置文件、配置版本
  3. Oracle查询优化-04插入、更新与删除数据
  4. fx5u模拟量如何读取_FX5U系列三菱产品 使用模拟量时的注意事项
  5. bzoj1257 数学整理二分查询
  6. java mongo api_MONGODB的javaAPI简单应用
  7. python整数转换字符串_Python | 将字符串转换为整数列表
  8. SNMP客户端工具MIB Browser
  9. Linux下DNS服务器的基本搭建
  10. echarts设置标题样式_Pyecharts 全局配置项之标题配置项
  11. 单细胞文章专列——细胞图谱
  12. 水贝风机远程控制app
  13. 【iuap5.0特性解读】构建以业务创新和能力沉淀为核心的中台架构体系
  14. Unity自定义UI组件(十一) 雷达图、属性图
  15. Service Principal 介绍
  16. 特战旅php 视频_15个特战旅精锐大比拼,新特种部队就一定差劲?咱们用实力来说话...
  17. 渗透测试-完整渗透流程(一.信息收集)
  18. R语言曲线回归:多项式回归、多项式样条回归、非线性回归数据分析
  19. 必学PHP类库/常用PHP类库大全,php 类库分类-收集
  20. python金融大数据分析笔记----第十章 2(风险测量)

热门文章

  1. 【单片机笔记】基于STM32硬件平台的最新FATFS 最新版ff14版本的移植
  2. YOLOV3目标检测
  3. 微信小程序开发之——用户登录-开放数据校验与解密(6)
  4. linux内存泄漏通用排查方法
  5. [反汇编练习] 160个CrackMe之004
  6. Hibernate(JFIS)
  7. Choosing a good chart
  8. 即时通讯,对比 环信、融云、腾讯IM
  9. SVM中函数间隔和几何间隔的区别
  10. JavaWeb——用户信息列表案例