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

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

[复制链接]
waytoanswer 发布时间:2012-12-21 18:16
【原创】驱动包含初始化,获取状态,获取芯片信息,页面读写,主存储区向缓冲区数据传送,缓冲区数据向主存储区写数据,缓冲区读写,字节读写,页面擦除,块擦除,扇区擦除,芯片擦除,扇区保护使能/除能,扇区保护寄存器擦除与编程,芯片写保护使能/除能等API驱动函数。该驱动是基于Coocox的免费Arm Cortex-M系列开发平台CoIDE中自带的开源Cox_Peripheral外设驱动库编写,所用MCU为STM32F103VET。有兴趣的可以移植到自己开发板上使用。
另外分享一下编写该驱动的心得:
1.直接摘自数据手册:
Group A commands consist of:
1. Main Memory Page Read
2. Continuous Array Read
3. Read Sector Protection Register
4. Read Sector Lockdown Register
5. Read Security Register
Group B commands consist of:
1. Page Erase
2. Block Erase
3. Sector Erase
4. Chip Erase
5. Main Memory Page to Buffer 1 (or 2) Transfer
6. Main Memory Page to Buffer 1 (or 2) Compare
7. Buffer 1 (or 2) to Main Memory Page Program with Built-in Erase
8. Buffer 1 (or 2) to Main Memory Page Program without Built-in Erase
9. Main Memory Page Program through Buffer 1 (or 2)
10. Auto Page Rewrite
Group C commands consist of:
1. Buffer 1 (or 2) Read
2. Buffer 1 (or 2) Write
3. Status Register Read
4. Manufacturer and Device ID Read
Group D commands consist of:
1. Erase Sector Protection Register
2. Program Sector Protection Register
3. Sector Lockdown
4. Program Security Register
If a Group A command is in progress (not fully completed), then another command in Group A,
B, C, or D should not be started. However, during the internally self-timed portion of Group B
commands, any command in Group C can be executed. The Group B commands using buffer 1
should use Group C commands using buffer 2 and vice versa. Finally, during the internally self-
timed portion of a Group D command, only the Status Register Read command should be
executed.

2.字节读写时需要注意读写的字节地址是否是按页对齐(即读写地址是否与某一页面起始地址相同),如果不是对齐的,在跨页读写数据时需要分类讨论。
3.往主存储空间写数据时只能采用先写入缓冲区,再发送Buffer to Main Memory Page Program 指令将缓冲区数据由内部编程时序写入主存。还要注意在向缓冲区写数据前如果有必要先要将所要写的页面内容用 Main Memory Page to Buffer Transfer指令读出到缓冲区再写,特别是对于所要写入数据不满一页的情况必须这样,否则页面中前面或后面没有写的数据在执行Buffer to Main Memory Page Program 后会覆盖主存储区原来的值,如果没有先读出原值,那么在写完后会导致不想修改的值被篡改,如果从主存储区读出原来的值再写回去就不会有问题了,对于连续整页写,则可以不用先读出数据以节省时间,提高写入速度。
4.测试发现扇区擦除和芯片擦除需要消耗不少时间,虽然AT45DB161宣称读速度能到66MHz,但写速度确实有点慢了,写入980KB数据用了34秒,速度接近29KByte/s,这个速度与程序的结构也有一定关系.
AT45DB161_CoX_lib.rar (8.42 KB, 下载次数: 139)
收藏 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发表:
最好的程序发上来共享看看比较好哦。 

在附件里哦
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外设驱动库编写

能不能将具体的函数定义 贴出来 非常感谢
12下一页

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版