你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写

[复制链接]
waytoanswer 发布时间:2012-12-21 18:16
【原创】驱动包含初始化,获取状态,获取芯片信息,页面读写,主存储区向缓冲区数据传送,缓冲区数据向主存储区写数据,缓冲区读写,字节读写,页面擦除,块擦除,扇区擦除,芯片擦除,扇区保护使能/除能,扇区保护寄存器擦除与编程,芯片写保护使能/除能等API驱动函数。该驱动是基于Coocox的免费Arm Cortex-M系列开发平台CoIDE中自带的开源Cox_Peripheral外设驱动库编写,所用MCU为STM32F103VET。有兴趣的可以移植到自己开发板上使用。0 V$ U: w7 K+ j7 ^
另外分享一下编写该驱动的心得:
1 e9 m. y) u, h2 m& C$ j1.直接摘自数据手册:
" B& d' ^4 E4 o: h4 \Group A commands consist of:) ~1 m! I. f0 Q5 ~. m
1. Main Memory Page Read
( R" _* _- ]/ M- Y2. Continuous Array Read) q; }) Y& x- F) |( F. A3 U% h: c
3. Read Sector Protection Register
$ z6 Q, w0 Y8 T5 T& k4 ?4. Read Sector Lockdown Register/ N# Q4 Y4 r% b# T- e; X5 ]: u
5. Read Security Register- l0 i  |3 L3 L6 `6 c1 o
Group B commands consist of:, C/ w! C$ \8 r! B7 y9 t% Q4 [
1. Page Erase
9 ]7 r( d  u2 C5 D2 h7 t/ j, F2. Block Erase
8 G9 h& g/ g5 A; w" B2 S& V- |3. Sector Erase
4 @8 Q. L7 }2 [, H- o: q4. Chip Erase7 G. ]% s; ]! C- E
5. Main Memory Page to Buffer 1 (or 2) Transfer
+ u( q3 `6 M: D* o/ h6. Main Memory Page to Buffer 1 (or 2) Compare
1 H# q  {- _+ s+ ?2 B8 u6 s2 k9 U7. Buffer 1 (or 2) to Main Memory Page Program with Built-in Erase
3 j& c, X0 W5 A4 i, A3 J/ I  Q8. Buffer 1 (or 2) to Main Memory Page Program without Built-in Erase% X. {( C& W7 d0 R5 @
9. Main Memory Page Program through Buffer 1 (or 2)+ d$ P0 }1 O! p3 i9 r
10. Auto Page Rewrite
7 U; ?2 K" o( l6 [# zGroup C commands consist of:( O  H# m1 }6 `* \
1. Buffer 1 (or 2) Read8 x, Z/ g) }- }4 x, _
2. Buffer 1 (or 2) Write5 e0 [2 t1 P5 s- L. }2 r& L, S
3. Status Register Read, r! t* p- T6 G. o- \3 W
4. Manufacturer and Device ID Read  H1 ^. P; j: x  M
Group D commands consist of:
  ?! d6 D# V/ {/ r' w( G& g% w1. Erase Sector Protection Register
4 J8 x$ X8 |, ]; L+ V1 G2. Program Sector Protection Register7 S5 T1 P5 e& A5 b, n2 m/ @
3. Sector Lockdown0 V' J7 _4 b3 m3 i  r3 l
4. Program Security Register
; ?3 `# b2 G! a/ I% IIf a Group A command is in progress (not fully completed), then another command in Group A,  e; n0 L3 q- L9 z5 D$ X- x- e1 l
B, C, or D should not be started. However, during the internally self-timed portion of Group B$ J1 W) z3 m+ q, w; d0 ~
commands, any command in Group C can be executed. The Group B commands using buffer 1) K" M- o  l( \" i/ V3 F
should use Group C commands using buffer 2 and vice versa. Finally, during the internally self-0 }, g5 @1 T+ O9 `; f: y, F
timed portion of a Group D command, only the Status Register Read command should be
1 r& R- s7 ^1 z2 c  _& `executed.
1 U& x/ m1 p8 o, N
2.字节读写时需要注意读写的字节地址是否是按页对齐(即读写地址是否与某一页面起始地址相同),如果不是对齐的,在跨页读写数据时需要分类讨论。
* M2 z: G" c; e2 Z/ b% m: F! }3.往主存储空间写数据时只能采用先写入缓冲区,再发送Buffer to Main Memory Page Program 指令将缓冲区数据由内部编程时序写入主存。还要注意在向缓冲区写数据前如果有必要先要将所要写的页面内容用 Main Memory Page to Buffer Transfer指令读出到缓冲区再写,特别是对于所要写入数据不满一页的情况必须这样,否则页面中前面或后面没有写的数据在执行Buffer to Main Memory Page Program 后会覆盖主存储区原来的值,如果没有先读出原值,那么在写完后会导致不想修改的值被篡改,如果从主存储区读出原来的值再写回去就不会有问题了,对于连续整页写,则可以不用先读出数据以节省时间,提高写入速度。
( k. x8 G* r8 k+ _4.测试发现扇区擦除和芯片擦除需要消耗不少时间,虽然AT45DB161宣称读速度能到66MHz,但写速度确实有点慢了,写入980KB数据用了34秒,速度接近29KByte/s,这个速度与程序的结构也有一定关系.
5 J+ s8 p0 l5 v- u& a; O: M1 f AT45DB161_CoX_lib.rar (8.42 KB, 下载次数: 144)
赞 收藏 1 评论13 发布时间:2012-12-21 18:16

举报

13个回答
书剑飘零 回答时间:2012-12-21 18:55:40

RE:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写

看看,学习了
zykzyk-93033 回答时间:2012-12-21 21:12:19

RE:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写

最好的程序发上来共享看看比较好哦。
waytoanswer 回答时间:2012-12-21 21:53:45

回复:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写

回复第 3 楼 于2012-12-21 21:12:19发表:$ B( U) x0 {* n+ O) {
最好的程序发上来共享看看比较好哦。 4 q+ ^9 n, i4 l4 a

3 W4 }3 g6 N0 c" b在附件里哦
fykqiqi 回答时间:2012-12-21 22:16:35

RE:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写

学习一下!!!!!!!!!!!!!!
hebo230-203286 回答时间:2013-7-12 19:05:55

回复:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写

 
ouyangjian23 回答时间:2013-8-23 14:16:57

回复:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写

楼主,谢谢分享,试着在移植你的驱动,请问  xSPIDataWrite(AT45DB161_SPI_PORT, pucBuffer, ulNumByteToWrite);该函数在你的程序中没有定义,这个函数是通过spi写入缓冲区pucBuffer的ulNumByteToWrite个数据吗
ouyangjian23 回答时间:2013-8-23 14:18:13

回复:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写

能不能将具体的函数定义 贴出来 非常感谢
ouyangjian23 回答时间:2013-8-23 14:50:43

回复:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写

楼主,你的AT45DB161_Write函数,能写多页数据吗?好像不能
heishadow-13786 回答时间:2013-8-26 10:24:31

RE:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写

能不能将具体的函数定义 贴出来 非常感谢
flylin-1272289 回答时间:2013-12-17 08:34:22

回复:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写

学习一下!!!!!!
qq994865664 回答时间:2018-8-27 14:55:05
很需要,感谢分享
3 `$ g* R2 i7 e* V·~~~~~~~~
hhhhhhhaa 回答时间:2018-10-15 16:44:24
驱动下载下来不能直接用啊,还需要改,楼主能做成通用的吗
qian182 回答时间:2018-11-28 10:38:41
非常有用,感谢分享
3 V' c: [" v1 u  V% |& A' d5 T另外想问一下,AT45DB641D和AT45DB642D有区别吗?是不是直接可以用LZ的程序?

所属标签

相似技术帖

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版