简述ich7中spi总线flash rom的读写
来源:互联网 发布:雅思作文批改 知乎 编辑:程序博客网 时间:2024/05/20 16:40
ich7中spi总线flash rom的读写
=========================
1. 说明
x86主板上南桥芯片采用ich7,在ich7的spi总线上有一块eeprom,这块就是bios。
2. ich7 spi控制寄存器地址
ich7上的设备作为pci设备挂载在系统中,其中device 31、function 0是lpc。
也就是bus = 0, device = 0x1f, function = 0
其配置空间F0h存放RCBA。
spi控制寄存器对应的地址段为 0x3020 - 0x308f
用ioremap()映射这段空间到linux虚存空间,就可以控制spi控制寄存器了。
3. spi的控制寄存器
具体的请看ich7的datasheet
1> spis - spi status register
2> spic - spi control register
3> spia - spi address register
4> spid - spi data register
5> bbar - bios base address register
6> preop - prefix opcode configurationregister
7> optype - opcode type configuration register
8> opmenu - opcode menu configuration register
9> pbr[N] - protected bios range[N]
spi总线是如何收发数据,这里不需要了解,只需要控制以上寄存器,它们会完成spi数据的收发。
4. spi控制寄存器初始化
主要初始化的寄存器如下
1> preop
software programs an spi opcode into this field that is premittedto run as the first command in an atomic cycle sequence.
在命令序列开始前会首先执行这个命令
比如,使用0x06,对应的是WREN写使能命令,在写操作之前就要先执行这个命令
2> optype
操作能行分四类
00 - 无需地址读操作
01 - 无需地址写操作
10 - 需地址读操作
11 - 需地址写操作
无需地址的操作一般都是读写状态寄存器等等
需地址的操作一般是读写数据的
3> opmenu
opcode有8组,也即是说只能进行这8种操作,对系统也是一种保护。
具体的命令需要看eeprom手册,一下列出几种:
write enable
write disable
read status register
write status register
read data bytes
page program
sector erase
bulk erase
5. 读写操作的执行
经过上面的初始化,下面直接控制spia spid spis spic就可以了
1> spia中写入需要操作数据地址偏移量
2> spid中写入需要传输的数据
3> spis中清除状态位0x4 0x8
4> spic中写入opmenu中匹配的命令,data长度,置位SCGO开始传输
5> 读取spis中状态位0x04 CDS或者0x01 SCIP,等待操作完成
注:對於 write device command (Ex. WREN,WRSR,PROGRAM,ERASE..)你有再多 check device端的 status register嗎 ? 別忘了 device端仍有 status (InProgress)要check
所以,"pseudo code" is:
1.put the opcode into the OPMENU buffer
2.set the opcode type
3.If ( Address is required )
Then set the SPI Address field
Else clear SPI Address field
4.set the cycle opcode pointer
5.If ( WREN is needed )
Then set ACS, put WREN opcode, and set Sequence Prefix Opcode Pointer
Else clear ACS
6.If ( Data is involved )
Then set Data Cycle and DBC
Else clear Data Cycle
7.If ( Host write data to device )
Then put data into SPI DATA registers
8.set Cycle Go bit to initiate the transfer
9.2-phase status check ( both host and device )
10.clear status
PS:由于是bios芯片,操作一定要十分谨慎。
- 简述ich7中spi总线flash rom的读写
- 总线flash和spi flash
- ITE8502下的SPI flash读写问题
- MX25L1635D spi-flash芯片的读写记录
- FLASH读写----SPI
- SPI Flash Rom W25Q16 ----基于STC15
- STM32 SPI接口读写SPI flash实验
- 读写SPI FLASH--驱动部分
- 读写SPI FLASH--应用程序部分
- LPC1343读写SPI FLASH at25f1024
- AVR(Mega8)的 IO口模拟SPI,读写FLASH
- TinyOS 再论FLASH与SPI总线问题
- DM8168平台中完成gv7601的spi总线驱动笔记
- SPI Flash的操作
- spi总线的特点总结
- SPI,IIc总线的区别
- SPI总线的初步认识
- SPI总线的基础认识
- AOP入门(一)
- C和C++__带默认值参数的函数说明
- [译]Kinect for Windows SDK开发入门(三):基础知识 下
- 项目飞机大战01:主要实现背景的移动,飞机的动画和触控,子弹的生成和发射
- 微信公众帐号开发教程第14篇-自定义菜单的创建及菜单事件响应
- 简述ich7中spi总线flash rom的读写
- Java知识点回顾一
- 微信公众帐号开发教程第15篇-自定义菜单的view类型(访问网页)
- 百度社会化分享服务
- 为什么要两次调用encodeURI来解决乱码问题
- 星级选择器 提交代码
- 单元测试,集成测试概念与各种工具介绍
- 微信公众帐号开发教程第16篇-应用实例之历史上的今天
- 用jquery统计子菜单的条数(demo)