
【原创】驱动包含初始化,获取状态,获取芯片信息,页面读写,主存储区向缓冲区数据传送,缓冲区数据向主存储区写数据,缓冲区读写,字节读写,页面擦除,块擦除,扇区擦除,芯片擦除,扇区保护使能/除能,扇区保护寄存器擦除与编程,芯片写保护使能/除能等API驱动函数。该驱动是基于Coocox的免费Arm Cortex-M系列开发平台CoIDE中自带的开源Cox_Peripheral外设驱动库编写,所用MCU为STM32F103VET。有兴趣的可以移植到自己开发板上使用。+ I6 d% e2 z7 u9 a8 K 另外分享一下编写该驱动的心得:" Q; c; t9 g; ^4 B: b, F8 i 1.直接摘自数据手册:* y5 ^3 I- F, l( U2 z! V: ^ Group A commands consist of: 1. Main Memory Page Read( |4 s" |) e) l$ U& p# o+ Z3 G9 H) Q$ J 2. Continuous Array Read) @; u2 h: t! e- v, C 3. Read Sector Protection Register. j B |! U( G4 m3 D 4. Read Sector Lockdown Register2 R1 f6 ]; F8 N6 i 5. Read Security Register# k' A7 A& t7 Q& V0 R Group B commands consist of:- S) p3 s" h8 m& } 1. Page Erase 2. Block Erase+ m/ m4 c, ]8 Y# B6 {7 i 3. Sector Erase 4. Chip Erase 5. Main Memory Page to Buffer 1 (or 2) Transfer/ M" U* J! Z U3 p 6. Main Memory Page to Buffer 1 (or 2) Compare4 O; k, L, ]% |& t3 J 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:- d& F( A6 e E' r: F0 r0 c 1. Buffer 1 (or 2) Read 2. Buffer 1 (or 2) Write 3. Status Register Read, B0 y& q6 I2 ?2 o: E 4. Manufacturer and Device ID Read Group D commands consist of: 1. Erase Sector Protection Register 2. Program Sector Protection Register) }/ W& q# }1 m( s( }# a! Z 3. Sector Lockdown 4. Program Security Register+ A' F( n, B; W- C0 H 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.7 T7 o# Q3 u- {+ W% Q 2.字节读写时需要注意读写的字节地址是否是按页对齐(即读写地址是否与某一页面起始地址相同),如果不是对齐的,在跨页读写数据时需要分类讨论。 3.往主存储空间写数据时只能采用先写入缓冲区,再发送Buffer to Main Memory Page Program 指令将缓冲区数据由内部编程时序写入主存。还要注意在向缓冲区写数据前如果有必要先要将所要写的页面内容用 Main Memory Page to Buffer Transfer指令读出到缓冲区再写,特别是对于所要写入数据不满一页的情况必须这样,否则页面中前面或后面没有写的数据在执行Buffer to Main Memory Page Program 后会覆盖主存储区原来的值,如果没有先读出原值,那么在写完后会导致不想修改的值被篡改,如果从主存储区读出原来的值再写回去就不会有问题了,对于连续整页写,则可以不用先读出数据以节省时间,提高写入速度。3 }/ H2 h" _6 ~4 S) O5 Q 4.测试发现扇区擦除和芯片擦除需要消耗不少时间,虽然AT45DB161宣称读速度能到66MHz,但写速度确实有点慢了,写入980KB数据用了34秒,速度接近29KByte/s,这个速度与程序的结构也有一定关系. ![]() |
RE:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写
RE:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写
回复:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写
最好的程序发上来共享看看比较好哦。
# D$ B& W$ T1 k. C8 p- Y G: {, ~! q
在附件里哦
RE:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写
回复:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写
回复:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写
回复:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写
回复:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写
RE:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写
回复:AT45DB161_SPI_Flash驱动代码_基于STM32F103_CoIDE_Cox外设驱动库编写
·~~~~~~~~
另外想问一下,AT45DB641D和AT45DB642D有区别吗?是不是直接可以用LZ的程序?