X-008-UBOOT-支持命令行(Bubblegum-96平台)

作者:wowo 发布于:2016-7-27 21:41 分类:X Project

经过前面文章的铺垫,u-boot command line的支持已经成了一个顺理成章的事情了。因此,本文没有太多技术细节,仅仅记录支持命令行的实现过程,权当“X Project” “【任务2】启动到u-boot command line”的一个完结。

阅读全文>>

标签: u-boot cmdline

评论(11) 浏览(12312)

X-007-UBOOT-DDR的初始化(Bubblegum-96平台)

作者:wowo 发布于:2016-7-21 22:47 分类:X Project

到目前为止,“X Project”在Bubblegum-96平台上的代码,都是运行在SRAM中。由于SRAM的size很小(最多也就96KB),如果要做更多的事情,就必须把DDR跑起来。不过,关于Bubblegum-96平台的DDR driver,我和codingbelief同学折腾了很久,试图找出一个最佳的方法,给大家呈现出DDR driver的开发方法和开发步骤。最终,受限于“资源”的短缺,还是失败了。

根据Bubblegum-96公开的资料,只知道它包含了一个2GB的、单bank的LPDDR,除此之外,找不到任何技术有关的细节,如LPDDR的datasheet、S900 DDR controller的说明、DDR时钟的配置等等。没有这些东西,我们根本无法完成DDR的配置,更不用说以此介绍、分析DDR driver了。

但是,虽然困难重重,“X Project”还是要进行下去,既然常规方法走不通,我们就采用一些非常规的手段,无论如何,还是能把DDR成功的初始化起来的。由于是非常规手段,当然就无法开源,也无法给大家讲解了。

因此,本文关于DDR的技术细节不多,主要目的是结合DDR的初始化,进一步介绍嵌入式linux开发的基本过程,包括如下知识点:

嵌入式Linux的启动过程。

u-boot SPL的使用场景。

u-boot启动过程中DDR初始化的流程。

阅读全文>>

标签: SDRAM u-boot spl ddr

评论(4) 浏览(10387)

X-006-UBOOT-pinctrl driver移植(Bubblegum-96平台)

作者:wowo 发布于:2016-7-9 21:47 分类:X Project

wowo觉得,在linux kernel新引入的众多子系统中,pinctrl subsystem是一个特别晦涩难懂的子系统,它所解决的问题,和它所引入的困扰,不相上下。在平时工作的过程中,年轻工程师问的最多的,就是在驱动中要怎么使用pinctrl?这样配置pinctrl到底是什么意思?等等。

对一个子系统来说,如果不能让它的使用者(consumer)很容易的理解和掌握,就宣告了它的失败。更不用说让它的提供者(provider)简单、快速地编写驱动程序了。

为什么会这样呢?通俗一点讲,就是“大炮打蚊子”。从技术的角度看,pinctrl是一个非常优秀的子系统,有着复杂而巧妙的封装和抽象,但它所要解决的问题,实际上非常简单、直白。这就造成了一个落差,从而带来了各种理解上的困惑。

正因为此,u-boot在照搬linux kernel pinctrl的同时,额外提供了一种简洁的方法。本文将借助“X Project” u-boot中pin control driver的移植过程,介绍、分析这种方法,并以此理解pinctrl的本质。

与此同时,我们会基于“X-005-UBOOT-device tree移植(Bubblegum-96平台)”,扩展对device tree的使用,以加深对device tree的理解和掌握。

阅读全文>>

标签: subsystem u-boot porting pinctrl

评论(8) 浏览(11117)

蓝牙协议分析(7)_BLE连接有关的技术分析

作者:wowo 发布于:2016-7-1 17:17 分类:蓝牙

了解蓝牙的人都知道,在经典蓝牙中,保持连接(Connection)是一个相当消耗资源(power和带宽)的过程。特别是当没有数据传输的时候,所消耗的资源完全被浪费了。因而,对很多蓝牙设备来说(特别是功耗敏感的设备),希望在无数可传的时候,能够断开连接。但是,由于跳频(hopping)以及物理通道(Physical Channel)划分的缘故,经典蓝牙连接建立的速度实在难以忍受(要好几秒)。对那些突发的数据传输来说,几秒钟的连接延迟,简直是灾难。

因此,蓝牙SIG制订BLE规范的时候,充分考虑了这方面的需求,极大的简化了连接的建立过程,使连接速度可以达到毫秒级(最快3.75ms就可以搞定)。与此同时,为了节省功耗,也调整了跳频的策略。至此,相比广播通信而言,BLE面向连接的通信,几乎没有额外的代价。

在“蓝牙协议分析(5)_BLE广播通信相关的技术分析”中,我们对BLE的广播通信有了比较全面的了解,本文将接着分析和面向连接的通信有关的技术,包括连接的建立和断开、BLE跳频(Hopping)技术、Link Layer的应答、重传、流控、等等。

阅读全文>>

标签: 蓝牙 BLE connection 跳频 流控 hopping flow_control

评论(129) 浏览(77439)

X-005-UBOOT-device tree移植(Bubblegum-96平台)

作者:wowo 发布于:2016-6-29 22:14 分类:X Project

我们在“X-004-UBOOT-串口驱动移植(Bubblegum-96平台)”中,简单介绍了u-boot中serial driver的移植过程。由于serial driver是u-boot移植中的第一个driver,为了方便debug,并没有引入device tree。在serial driver ready之后,基本的console功能已经okay,基于此,我们可以着手增加device tree功能。

很久以前,我们在博客上写了三篇device tree的分析文章(Device Tree(一):背景介绍Device Tree(二):基本概念Device Tree(三):代码分析),这些文章的目的是介绍device tree背后的思想、原理、实现方法、等等,偏重于理论,相信给大家制造了不小的“心里压力”。

因此,本文将以“X Project”为契机,从实践的角度,以使用者的视角,介绍device tree使用方法。相信通过本文,大家对device tree的理解会上一个新台阶,达到化繁为简、随心所欲的境地。

阅读全文>>

标签: dts u-boot porting device_tree dtc dtb

评论(8) 浏览(15016)

串口通信技术浅析

作者:wowo 发布于:2016-6-24 22:50 分类:基础技术

最熟悉的陌生人!用这句话形容“串口”是再贴切不过的了。

对嵌入式工程师来说,“串口”是一个再熟悉不过的模块,熟悉到像喝水一样自然。与此同时,有关串口的很多细节,却被渐渐地模糊和忽略,例如:

我们经常挂在嘴边的serial、UART、RS232等概念,究竟是怎么回事?它们之间有何联系?有何区别?

串口的波特率(baud rate)是怎么定义和计算的?比特率(bit rate)又是怎么回事?二者的关系又是怎样?

为什么波特率有误差?通信过程中所容许的误差范围是多少?

本文将对上述问题,进行简单的总结和归纳,以便指导有关的开发工作。

阅读全文>>

标签: uart serial baud rate

评论(1) 浏览(16242)

X-004-UBOOT-串口驱动移植(Bubblegum-96平台)

作者:wowo 发布于:2016-6-18 9:56 分类:X Project

话说现在的u-boot长得和linux kernel越来越像,设备模型(driver model)、device tree、各种framework(gpio、pinctrl、clock、i2c、regulator、等等),各种概念,均和linux kernel保持一致。这对工程师(特别是linux驱动工程师)来说,是一个利好,因为熟悉了linux kernel相关子系统之后,去搞u-boot基本上就毫无压力了。

不过,对“蜗窝”来说,压力(或者说矛盾)就来了:要不要为u-boot中相关的子系统写分析文章?写吧,实在提不起兴趣,毕竟和kernel类似,我们的重点又在kernel分析上。不写吧,不符合我们的风格啊!

最后,鉴于时间的压力,只能选一个折衷方案:

对于“X Project” u-boot移植过程所涉及的driver模块,只写一篇移植说明,至于其它的,只能战略性放弃(当然,如果有同学有兴趣帮忙补上,我们还是很欢迎的)。

本文是这类文章的第一篇,介绍串口驱动(serial driver)的移植过程。因为u-boot跑起来之后,第一件事就是要把串口输出(console)准备好,以便后续模块的debug。

阅读全文>>

标签: uart x project u-boot uboot porting serial

评论(10) 浏览(13885)

DRAM 原理 2 :DRAM Memory Organization

作者:codingbelief 发布于:2016-6-14 22:43 分类:基础技术

在 DRAM Storage Cell 章节中,介绍了单个 Cell 的结构。在本章节中,将介绍 DRAM 中 Cells 的组织方式。

阅读全文>>

标签: SDRAM dram

评论(9) 浏览(37763)

通过点亮LED的方法调试嵌入式代码

作者:wowo 发布于:2016-6-12 22:10 分类:软件开发

在软件开发的过程中,debug(调试)是一个很重要的事情,因为没有百分之百正确的代码,一旦结果不符合预期,我们需要知道问题出在哪里了。

在PC环境下开发应用程序,我们不需要太操心,因为有各式各样的模拟器、调试器可供使用,我们可以追踪到每一行代码的执行过程和执行结果,找出问题只是时间问题而已。但在嵌入式环境下,就有些麻烦了,能用的手段,无外乎两种:

1)使用硬件仿真器定位问题。

2)使用日志输出定位问题。

对嵌入式工程师(特别是linux工程师)而言,鉴于使用硬件仿真器的诸多不便(成本高,无法保证人手一个;硬件连接复杂,需要预留特定接口;使用不方便;等等),日志输出几乎成为必备且唯一的debug手段。但是,总会有例外:

系统刚刚启动,在日志输出的通道(通常是UART接口)ready之前,怎么debug?

在不得不使用仿真器之前,我们还有一个简单的方法,就是点LED灯,本文将结合“X Project”“【任务2】启动到u-boot command line”实现的过程,对这个方法进行简单的介绍和总结。

阅读全文>>

标签: debug LED

评论(6) 浏览(10912)

DRAM 原理 1 :DRAM Storage Cell

作者:codingbelief 发布于:2016-6-8 16:41 分类:基础技术

接下了 X Project SDRAM 的任务,趁机整理下 DRAM、SDRAM、DDR SDRAM、LPDDR 等相关的内容。

这是第一篇,简单介绍下 DRAM Storage Cell 的相关内容。

阅读全文>>

标签: SDRAM dram

评论(13) 浏览(66726)

Copyright @ 2013-2015 蜗窝科技 All rights reserved. Powered by emlog