《ARM嵌入式系统软件开发实例 2》PDF下载

  • 购买积分:17 如何计算积分?
  • 作  者:周立功等编著
  • 出 版 社:北京:北京航空航天大学出版社
  • 出版年份:2006
  • ISBN:781077879X
  • 页数:582 页
图书介绍:本书第1章基于ISP1160A1 USB主机控制器介绍ZLG/Host Stack主机协议栈的原理;第2章基于ZLG/Host Stack主机协议栈,开发USB大容量类设备主机端驱动应用实例;第3章详细分析SD/MMC大容量卡读写软件包ZLG/SD的设计思想;第4章剖析Modbus RTU/ASCII协议,并详细介绍该ZLG/Modbus协议栈的原理及应用;第5章介绍了嵌入式系统的引导程序核心模块ZLG/BOOT软件包的设计思想及应用实例;第6章介绍支持多芯片的K9F2808驱动程序原理及应用;第7章介绍具有写平衡算法的NAND FLASH驱动程序ZLG/FFS软件包原理及应用。

第1章 ZLG/Host Stack主机栈设计思想 1

1.1 USB主机概述 1

1.1.1 什么是USB 1

1.1.2 USB系统构成 2

1.1.3 USB主机是怎样工作的 4

1.1.4 USB分组标识 5

1.1.5 USB标准设备请求 5

1.1.6 USB设备描述符 8

1.1.7 USB设备枚举的数据传输过程 11

1.2 ISP1160/ISP1161A1 USB主机控制器概述 17

1.3 结构图及引脚描述 18

1.3.1 ISP1160内部结构图 18

1.3.2 引脚分配及描述 20

1.4 功能描述 24

1.5 微处理器总线接口 25

1.5.1 可编程I/O(PIO)寻址模式 25

1.5.2 DMA模式 25

1.5.3 PIO模式下访问控制寄存器 26

1.5.4 PIO模式下访问FIFO缓冲区RAM 27

1.5.5 DMA模式下访问FIFO缓冲区RAM 28

1.5.6 中断 29

1.6 主机控制器(HC) 31

1.6.1 HC的四种USB状态 31

1.6.2 USB通路的产生 32

1.6.3 PTD数据结构 33

1.6.4 HC内部FIFO缓冲区RAM结构 36

1.6.5 HC操作模式 42

1.6.7 下行口的内部下拉电阻 44

1.6.6 微处理器的装载 44

1.6.8 过流检测及电源开关控制 45

1.6.9 挂起与唤醒 48

1.7 HC寄存器 49

1.7.1 HcRevision寄存器 51

1.7.2 HcControl寄存器 51

1.7.3 HcCommandStatus寄存器 53

1.7.4 HcInterruptStatus寄存器 54

1.7.5 HcInterruptEnalbe寄存器 56

1.7.6 HcInterruptDisalbe寄存器 57

1.7.7 HcFmInterval寄存器 58

1.7.8 HcFmRemaining寄存器 59

1.7.9 HcFmNumber寄存器 60

1.7.10 HcLSThreshold寄存器 61

1.7.11 HcRhDescriptorA寄存器 63

1.7.12 HcRhDescriptorB寄存器 64

1.7.13 HcRhStatus寄存器 66

1.7.14 HcRhPortStatus[1∶2]寄存器 67

1.7.15 HcHardwareConfiguration寄存器 71

1.7.17 HcTransferCounter寄存器 72

1.7.16 HcDMAConfiguration寄存器 72

1.7.18 HcμPInterrupt寄存器 73

1.7.19 HcμPInterruptEnable寄存器 74

1.7.20 HcChipID寄存器 75

1.7.21 HcScratch寄存器 76

1.7.22 HcSoftwareReset寄存器 77

1.7.23 HcITLBufferLength寄存器 77

1.7.24 HcATLBufferLength寄存器 78

1.7.25 HcBufferStatus寄存器 79

1.7.26 HcReadBackITL0Length寄存器 79

1.7.27 HcReadBackITL1Length寄存器 80

1.7.28 HcITLBufferPort寄存器 81

1.7.29 HcATLBufferPort寄存器 82

1.8 HCD主机驱动设计概述 83

1.8.1 ISP1160软件模型 83

1.8.2 ISP1160硬件模型 84

1.9 USB主机端软件结构 84

1.10 操作ISP1160的主机控制器 86

1.10.1 软件访问硬件组件 86

1.10.2 HC控制和状态寄存器 86

1.10.3 典型硬件初始化次序 92

1.11 主机控制驱动程序操作流程 103

1.11.1 访问ATL缓冲区 103

1.11.2 访问ITL缓冲区 106

1.11.3 设置PTD以供传输 106

1.12 数据结构总览 108

1.12.1 设备描述信息结构体 109

1.12.2 端点描述信息结构体 110

1.12.3 传输描述符结构体 111

1.13.1 前台操作 115

1.13 主机控制器驱动程序 115

1.13.2 后台操作 124

1.13.3 中断服务程序 140

1.14 USB驱动程序 144

1.14.1 设备枚举 144

1.14.2 设备移除 157

1.14.3 数据传输 160

1.14.4 类设备管理 166

1.15 USB主机任务 173

1.16.1 USBHost Stack初始化 181

1.16 用户使用API函数 181

1.16.2 查找函数 182

1.16.3 数据传输函数 186

1.16.4 扩展函数 192

第2章 大容量设备类驱动设计实例 195

2.1 大容量存储类概述 195

2.2 驱动模型概述 197

2.2.1 使用数据结构 197

2.2.2 大容量设备初始化 199

2.2.3 删除大容量设备 208

2.2.4 大容量类命令块处理 210

2.2.5 命令API函数 211

2.3 Bulk-Only传输 220

2.3.1 单批量Bulk-Only传输协议 220

2.3.2 标准描述符 222

2.3.3 命令/数据/状态协议 226

2.3.4 主机/设备数据传输 229

2.4 单批量传输的软件实现 231

2.4.1 软件操作流程 231

2.4.2 大容量协议类请求 232

2.4.3 单批量命令块处理 234

2.4.4 复位恢复 240

2.5 CBI-Only传输 241

2.5.1 CBI协议概述 241

2.5.2 CBI功能特性 242

2.5.3 标准请求 247

2.5.4 设备类请求 252

2.6 CBI传输的软件实现 254

2.7 UFI指令介绍与软件实现 256

2.7.1 UFI子类命令 257

2.7.2 UFI子类命令块的结构 258

2.7.3 查询命令 258

2.7.4 读命令 261

2.7.5 读容量命令 263

2.7.6 写命令 265

2.7.7 请求判别命令 267

2.7.8 判别数据 269

2.8.2 API函数 272

2.8.1 初始化配置 272

2.8 大容量驱动用户手册 272

第3章 ZLG/SD软件包原理分析 275

3.1 SD/MMC卡的外部物理接口 275

3.1.1 SD模式 276

3.1.2 SPI模式 277

3.1.3 卡信号时序 279

3.2 SD/MMC卡的内部结构 279

3.2.1 SD/MMC卡存储器阵列的划分 280

3.2.2 SD/MMC卡相关寄存器 281

3.3 访问SD/MMC卡的硬件电路设计 294

3.3.1 SPI总线 296

3.3.2 卡供电控制 296

3.3.3 卡检测电路 296

3.4 ZLG/SD软件包总体设计思想 296

3.4.1 设计目标 297

3.4.2 软件包整体设计思想 297

3.5 SD/MMC卡读/写软件包配置头文件 298

3.6 SD/MMC读/写软件包硬件抽象层的实现 300

3.6.1 SD/MMC卡电源控制 300

3.6.2 初始化访问卡的硬件条件 301

3.6.3 设置SPI接口的时钟频率 303

3.6.4 用SPI接口发送1字节 303

3.6.5 从SPI接口接收1字节 304

3.6.6 CS信号 304

3.6.7 卡完全插入卡座与卡写保护检测 305

3.7 SPI总线协议及SD/MMC卡命令层的实现 305

3.7.1 SPI总线协议 305

3.7.2 SPI总线协议命令集 309

3.7.3 SPI总线命令与应答的实现 313

3.8.1 卡初始化 318

3.8 SD/MMC卡读/写软件包应用层的实现 318

3.8.2 获取SD/MMC卡的相关信息 322

3.8.3 SD/MMC卡的读操作 328

3.8.4 SD/MMC卡的写操作 335

3.8.5 等待忙函数 343

3.8.6 SD/MMC卡的其他操作 344

3.9 SD/MMC卡读/写软件包的结构说明 347

3.9.1 SD/MMC卡读/写软件包的硬件配置 347

3.9.2 SD/MMC卡读/写软件包提供的API函数 347

4.1 Modbus协议概述 351

第4章 ZLG/Modbus协议栈设计思想 351

4.1.1 协议描述 352

4.1.2 数据编码 354

4.1.3 Modbus数据模式 354

4.1.4 Modbus寻址模式 355

4.1.5 Modbus事务处理的定义 356

4.2 数据链路层 357

4.2.1 Modbus主/从原则 357

4.2.4 主站/从站状态图 358

4.2.2 Modbus编址规则 358

4.2.3 Modbus帧描述 358

4.2.5 主/从通信时序图 360

4.3 ZLG/Modbus协议栈设计思想 361

4.3.1 Modbus数据链路层 361

4.3.2 主站协议栈 363

4.3.3 从站协议栈 373

4.4 两种串行传输模式 377

4.4.1 RTU传输模式 378

4.4.2 RTU模式数据链路软件实现 383

4.4.3 ASCII传输模式 387

4.4.4 ASCII模式数据链路软件实现 391

4.5 指令系统 395

4.5.1 功能码分类 395

4.5.2 Modbus协议栈功能代码处理 397

4.5.3 0x01读取线圈状态 399

4.5.4 0x02读取输入状态 404

4.5.5 0x03读保持寄存器 409

4.5.6 0x04读取输入寄存器 413

4.5.7 0x05写单个线圈 417

4.5.8 0x06写单个寄存器 421

4.5.9 0x15写多个线圈 425

4.5.10 0x16写多寄存器 430

4.5.11 0x16屏蔽写寄存器 434

4.5.12 0x17读/写多寄存器 438

4.5.13 其他功能代码 443

5.1.1 什么是ZLG/BOOT 444

5.1.2 ZLG/BOOT的特点 444

5.1 概述 444

第5章 ZLG/BOOT原理及应用 444

5.2 启动配置文件的编写 445

5.3 命令 445

5.3.1 格式及注意点 445

5.3.2 load命令 446

5.3.3 set命令 446

5.3.4 sfr命令 448

5.3.5 run命令 449

5.4 ZLG/BOOT调用的外部函数与配置选项 449

5.5.2 特点 450

5.5.1 简介 450

5.5 使用范例——BootLoader for SmartARM2200的使用 450

5.5.3 目录结构 451

5.5.4 默认IP设置 451

5.5.5 修改用户IP设置 451

5.5.6 使用此BootLoader引导μClinux 452

5.6 使用范例——BootLoader for SmartARM2200的实现 458

5.6.1 main()函数 458

5.6.2 用户主任务 459

5.6.3 人机界面 461

5.7.2 总流程图 466

5.7 ZLG/BOOT原理 466

5.7.1 函数列表 466

5.7.3 数据结构 468

5.7.4 Boot() 472

5.7.5 Readline() 475

5.7.6 Cmdload() 476

5.7.7 CmdSfr(),CmdSfrh()和CmdSfrb() 478

5.7.8 CmdRun() 479

5.7.9 CmdSet() 480

5.7.10 Start_Boot 481

6.1 K9F2808芯片介绍 483

6.1.1 引脚描述 483

第6章 K9F2808U0C驱动程序 483

6.1.2 功能框图和阵列结构图 485

6.1.3 操作 486

6.1.4 K9F2808U0C指针操作 487

6.1.5 页面读操作 488

6.1.6 页面编程 489

6.1.8 读状态 490

6.1.7 块擦除 490

6.1.9 读ID 491

6.1.10 复位 492

6.1.11 NAND Flash技术注意事项 492

6.2 硬件连接 494

6.3 驱动程序的编写 495

6.3.1 编写规划 495

6.3.2 数据结构 495

6.3.3 函数列表 496

6.3.4 使用范例 499

6.3.5 K9fxx08ReadID() 500

6.3.6 K9fxx08ReadStatus() 501

6.3.7 K9fxx08SectorRead() 502

6.3.8 K9fxx08SectCRead() 504

6.3.9 K9fxx08SectorProgram() 505

6.3.10 K9fxx08SectorCProgram() 507

6.3.11 K9fxx08BlockErase() 509

6.3.12 K9fxx08SecCopy() 510

6.3.13 K9fxx08BlockCheck() 510

6.3.14 K9fxx08SectorCheck() 511

6.3.15 K9fxx08SectCCheck() 513

第7章 ZLG/FFS原理与应用 515

7.1 ZLG/FS概述 515

7.1.1 ZLG/FS的特点 515

7.1.2 已实现的特性 516

7.1.3 暂时未实现的特性 516

7.2 ZLG/FFS概述 516

7.3 ZLG/FS v1.10驱动程序编写规范 517

7.3.1 驱动程序模板 517

7.3.3 参数 521

7.3.2 关于config.h 521

7.3.4 逻辑盘初始化 523

7.3.5 卸载逻辑盘 523

7.3.6 读扇区 523

7.3.7 写扇区 524

7.3.8 获取驱动程序接口版本号 524

7.3.9 检测命令是否存在 524

7.3.10 低级格式化 524

7.3.11 释放扇区 524

7.3.15 获取每块扇区数 525

7.3.16 读数据块 525

7.3.12 获得设备总扇区数 525

7.3.14 查看介质是否改变 525

7.3.13 获得每扇区字节数 525

7.3.17 写数据块 526

7.4 ZLG/FFS的外部接口 526

7.4.1 保存ZLG/FFS硬件信息的结构体变量 526

7.4.2 ZLG/FFS v1.00驱动程序编程规范 527

7.4.3 硬件驱动之K9F2808U0C 530

7.4.4 在ZLG/FS v1.10 中使用ZLG/FFS 531

7.5 ZLG/FFS物理盘存储结构 532

7.5.1 物理盘数据结构图 532

7.5.2 系统标志域数据结构 533

7.5.3 物理盘坏块表 534

7.5.4 物理扇区备用数据存储区数据结构 535

7.6 ZLG/FFS原理与源码分析 536

7.6.1 坏块管理 536

7.6.2 把逻辑扇区映射到物理扇区 537

7.6.3 写平衡的实现 538

7.6.4 擦除物理块 541

7.6.5 ZLG/FFS主函数 544

7.6.6 DISK_INIT请求 547

7.6.7 卸载逻辑盘 555

7.6.8 读扇区 555

7.6.9 写扇区 557

7.6.10 低级格式化 571

7.6.11 释放扇区 577

7.6.12 获得设备总扇区数 580

7.6.13 其他请求 580

参考文献 582