最新打算学习基于内核驱动开发方面的知识,在看书的过程中发现,除了要遵循内核的开发规则外,具体实现部分和裸机开发差异不大,由于研究生期间做过单片机的开发,但毕竟ARM裸机开发要比单片机开发更复杂的多,因此打算从裸机开发开始重新学习一遍。
接下来就三星的S3C2440A为平台开始接下来的学习过程,该芯片的CPU核是ARM920T。下图是该SOC的结构框图
一、如何学习通信协议
众所周知,每种通信方式的实现都要遵循其通信协议,如低速的UART、I2C、SPI,高速的PCIe、MII等,那么如何学习一种通信协议呢,下面以串行通信协议为例子介绍一种学习思路。
1. 了解其物理实现,即物理结构。如有多少引脚,每个引脚的功能
2. 了解通信协议内容
(1)总线上空闲&忙的状态
(2)start和stop状态
(3)数据传输时高位在前还是低位在前
(4)如何校验数据的准确性
(5)发送方如何发送,接收方如何接收
3. 软件编程实现
二、UART串行通信协议
串行通信协议主要包括:uart、I2C、SPI等,我们平时所说的uart串口通信其实只是串行通信协议中的一种。
UART:通用异步收发传输器(Universal Asynchronous Receiver/Transmitter),
1. 物理连接
UART只有两个线TXD和RXD
2. 通信协议内容
(1)Tx == 1 时总线空闲
(2)1bit 0:start信号
(3)低位在前(默认是小端序,低地址对应低字节)
(4)校验位:奇偶校验
(5)数据发送位数5、6、7、8
3. 软件编程实现
裸机开发重点在于对寄存器的配置,首先要通过阅读芯片开发手册了解对应模块有哪些寄存器,内部实现原理。然后就是两大步骤:对寄存器进行初始化;实现具体功能。