娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

這里有個坑,我的路虎開發板原理圖上是AT45DB161這樣的芯片,實際上絲印卻是SST25VF016B,這兩個器件都是存儲設備,但是它們不是pin對pin的,這里大家需要注意下!!!


/******************** (C) COPYRIGHT 2008 STMicroelectronics ********************

* File Name          : spi_flash.h

* Author             : MCD Application Team

* Version            : V2.0.3

* Date               : 09/22/2008

* Description        : Header for spi_flash.c file.

********************************************************************************

* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS

* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.

* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,

* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE

* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING

* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.

*******************************************************************************/

 

/* Define to prevent recursive inclusion -------------------------------------*/

#ifndef __SPI_FLASH_H__

#define __SPI_FLASH_H__

 

/* Includes ------------------------------------------------------------------*/

#include "lpc17xx.h"

#include "def.h"

 

typedef enum

{

Clear_4_K = 0,

Clear_32_K = 1,

Clear_64_K = 2,

Clear_ALL_FLASH = 3,

}Block_Cnt;

 

/* Exported macro ------------------------------------------------------------*/

/* Select SPI FLASH: Chip Select pin low P0.16  */

#define CS_LOW() LPC_GPIO0->FIOCLR = (1<<16) //GPIO_ResetBits(GPIO_CS, GPIO_Pin_CS)

/* Deselect SPI FLASH: Chip Select pin high */

#define CS_HIGH() LPC_GPIO0->FIOSET = (1<<16) //GPIO_SetBits(GPIO_CS, GPIO_Pin_CS)

 

void SPI_FLASH_Init(void);

void Read_ID(void);

void Read_Data(long add,u16 cnt,u8 *buff);

u8 Read_State_Register(void);

void Write_State_Register(u8 dat);

void Write_Mul_Byte(u32 add,u8 *buff,u32 cnt);

void Block_Clear(Block_Cnt flag,u32 add);

 

 

#endif /* __SPI_FLASH_H */

 

/******************* (C) COPYRIGHT 2008 STMicroelectronics *****END OF FILE****/

 

 

 

 

/******************** (C) COPYRIGHT 2008 STMicroelectronics ********************

本文在STM32F103上實現SSH25的驅動,實現數據的寫入和讀取:

1:此驅動未加擦除時候是否擦除成功的判斷,一般寫入FLASH不成功的最大原因就是擦除不成功,

所以一般特選FLASH里面的一個地址存儲一個特征字,比如0x12,當執行完操作擦除命令后,

去判斷這個特征字是否被擦除為0xff,如果擦除成功,執行寫指令,當然,也可以進行CRC校驗

判斷寫入和讀取的是否一致;

2:FLASH的寫入時,避免被中斷打斷;

--------------------- 

作者:恰馮同學年少 

來源:CSDN 

原文:https://blog.csdn.net/golf_research/article/details/52133604 

版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

*******************************************************************************/

 

/* Includes ------------------------------------------------------------------*/

#include "sst25VF016b.h"

#include "lpc17xx_spi.h"

#include "lpc17xx_libcfg.h"

#include "lpc17xx_pinsel.h"

#include "lpc17xx_gpio.h"

#include "def.h"

 

/* Private macro -------------------------------------------------------------*/

/* Private variables ---------------------------------------------------------*/

/* Private function prototypes -----------------------------------------------*/

/* Private functions ---------------------------------------------------------*/

 

void delay_us(int a)

{

int i=a*25;

while(i--);

}

/*******************************************************************************

* Function Name  : SPI_FLASH_Init

* Description    : Initializes the peripherals used by the SPI FLASH driver.

* Input          : None

* Output         : None

* Return         : None

*******************************************************************************/

void SPI_FLASH_Init(void)

{

/*

* Initialize SPI pin connect

* P0.15 - SCK;

* P0.16 - SSEL - used as GPIO

* P0.17 - MISO

* P0.18 - MOSI

*/

 

PINSEL_CFG_Type PinCfg;

SPI_CFG_Type SPI_ConfigStruct;

 

PinCfg.Funcnum = 3;

PinCfg.OpenDrain = 0;

PinCfg.Pinmode = 0;

PinCfg.Portnum = 0;

PinCfg.Pinnum = 15;

PINSEL_ConfigPin(&PinCfg);

PinCfg.Pinnum = 17;

PINSEL_ConfigPin(&PinCfg);

PinCfg.Pinnum = 18;

PINSEL_ConfigPin(&PinCfg);

// PinCfg.Pinnum = 16;

// PinCfg.Funcnum = 0;

// PINSEL_ConfigPin(&PinCfg);

LPC_GPIO0->FIODIR|=(1<<16); //CS引腳配置為輸出(默認為輸入)

/* Deselect the FLASH: Chip Select high */

CS_HIGH();

 

// initialize SPI configuration structure to default

SPI_ConfigStructInit(&SPI_ConfigStruct);

 

// Initialize SPI peripheral with parameter given in structure above

SPI_Init(LPC_SPI, &SPI_ConfigStruct);

}

 

/*SST25發送一個字節的數據*/

u8 SST25_Send_Byte(u8 dat)

{

LPC_SPI->SPDR = dat;                                  //--- 向SPI寫數據 ---

while(0 == (LPC_SPI->SPSR & (1<<7)));                 //--- 等待SPI發送完畢 ---

return(LPC_SPI->SPDR);           

}

 

/*SST25讀取一個字節的數據*/

u8 SST25_Receive_Byte(void)

{

return SST25_Send_Byte(0xff);

}

 

/*讀狀態寄存器*/

u8 Read_State_Register(void)

{

u8 flag = 0;

CS_LOW();                //使能片選信號

SST25_Send_Byte(0x05);   //發送讀狀態寄存器操作碼0x05*/

flag = SST25_Receive_Byte();

CS_HIGH();               //禁止片選信號 

return flag;

}

 

/*等待內部擦除或者編程操作結束*/

void Wait_Busy_Clear(void)

{

while((Read_State_Register()&0x01) != 0x00);

}

 

/*寫狀態寄存器*/

void Write_State_Register(u8 dat)

{

CS_LOW();                //使能片選信號

SST25_Send_Byte(0x50);   //發送寫狀態寄存器使能操作碼0x50 

CS_HIGH();               //禁止片選信號 

CS_LOW();                //使能片選信號

SST25_Send_Byte(0x01);   //發送寫狀態寄存器操作碼0x01 

SST25_Send_Byte(dat);   //寫狀態寄存器為0x00

CS_HIGH();               //禁止片選信號 

Wait_Busy_Clear();

}

 

/*寫使能操作*/

void Write_Enable(void)

{

CS_LOW();                //使能片選信號

SST25_Send_Byte(0x06);   //發送寫使能操作碼0x06

CS_HIGH();               //禁止片選信號

}

 

/*寫禁止操作*/

void Write_Disable()

{

CS_LOW();                //使能片選信號

SST25_Send_Byte(0x04);   //發送寫使能操作碼0x04

CS_HIGH();               //禁止片選信號

}

 

/* 讀操作:0x03 */

void Read_Data(long add,u16 cnt,u8 *buff)

{

CS_LOW();                //使能片選信號

SST25_Send_Byte(0x03);   //發送寫使能操作碼0x03 

SST25_Send_Byte(add>>16);//發送存儲地址,24位

SST25_Send_Byte(add>>8); //發送存儲地址,24位

SST25_Send_Byte(add);    //發送存儲地址,24位

for(;cnt>0;cnt--)

*(buff++) = SST25_Receive_Byte();

CS_HIGH();               //禁止片選信號

}

 

/* 高速讀:0x0B */

void Read_High_Speed_Data(u32 add,u16 cnt,u8 *buff)

{

CS_LOW();                //使能片選信號

SST25_Send_Byte(0x0b);   //發送寫使能操作碼0x0b

SST25_Send_Byte(add>>16);//發送存儲地址,24位

SST25_Send_Byte(add>>8); //發送存儲地址,24位

SST25_Send_Byte(add);    //發送存儲地址,24位 

SST25_Send_Byte(0x00);   //發送一個空周期 

for(;cnt>0;cnt--)

*(buff++) = SST25_Receive_Byte();

CS_HIGH();               //禁止片選信號

}

 

/* 寫單個字節操作,字節編程:0x02 */

void Write_Byte(u32 add,u8 dat)

{

Write_Enable();          //寫使能

CS_LOW();                //使能片選信號

SST25_Send_Byte(0x02);   //發送字節編程操作碼0x02*/ 

SST25_Send_Byte(add>>16);//發送存儲地址,24位

SST25_Send_Byte(add>>8); //發送存儲地址,24位

SST25_Send_Byte(add);    //發送存儲地址,24位 

SST25_Send_Byte(dat);    //發送寫入的數據 

CS_HIGH();               //禁止片選信號 

Wait_Busy_Clear();

}

 

/* 寫多個字節操作,AAI編程:0xAD */

void Write_Mul_Byte(u32 add,u8 *buff,u32 cnt)

{

u32 i = 0;

Write_Enable();          //寫使能

CS_LOW();                //使能片選信號

SST25_Send_Byte(0xad);   //發送AAI編程操作碼0xad*/ 

SST25_Send_Byte(add>>16);//發送存儲地址,24位

SST25_Send_Byte(add>>8); //發送存儲地址,24位

SST25_Send_Byte(add);    //發送存儲地址,24位 

SST25_Send_Byte(buff[0]);//發送寫入的數據 

SST25_Send_Byte(buff[1]);//發送寫入的數據 

CS_HIGH();               //禁止片選信號 

i = 2;

while(i {

delay_us(10);

CS_LOW();                //使能片選信號

SST25_Send_Byte(0xad);   //發送AAI編程操作碼0xad*/ 

SST25_Send_Byte(buff[i++]);//發送寫入的數據 

SST25_Send_Byte(buff[i++]);//發送寫入的數據 

CS_HIGH();               //禁止片選信號 

}

delay_us(10);

Write_Disable();           //退出AAI模式 

delay_us(10);

Wait_Busy_Clear();         //等待寫結束

}

 

/*4k扇區擦除或者32k塊擦除或者64k塊擦除*/

const u8 bclr_cmd[]={0x20,0x52,0xd8,0x60};

void Block_Clear(Block_Cnt flag,u32 add)

{

if(flag<4)

{

Write_Enable();          //寫使能

CS_LOW();                //使能片選信號 

SST25_Send_Byte(bclr_cmd[flag]);   //發送扇區擦除操作碼0x20 

SST25_Send_Byte(add>>16);//發送存儲地址,24位

SST25_Send_Byte(add>>8); //發送存儲地址,24位

SST25_Send_Byte(add);    //發送存儲地址,24位 

CS_HIGH();               //禁止片選信號 

Wait_Busy_Clear();       //等待寫結束 

}

}

 

u8 ID[3];//0xBF2541

/* 讀設備ID:0x9F */

void Read_ID(void)

{

CS_LOW();                     //使能片選信號 

[1] [2]
關鍵字:LPC1768  SPI驅動  SST25VF016B 引用地址:LPC1768里的SPI驅動示例——基于SST25VF016B

上一篇:ARM體系結構之點亮LED燈
下一篇:LPC1788的spi使用

推薦閱讀

? ?現在國內的旗艦一發布,馬上鋪天蓋地的測評接踵而至。熱度高所以測評的人多是一方面,國內廠商舍得給大小評測機構發測評機是另一方面。至于這種發來的測評機,評測能不能客觀獨立第三方就不好說嘍~大法就比較尷尬了,至今沒看到多少測評。這次正好朋友手里有一臺,借來把玩一二,與一加6,NEX對比一下,有啥說啥,大家看個樂兒。不需要太多套路式評...
現代社會依靠機器人技術來發揮對工業制造系統的平穩運行以及建筑,醫療保健和運輸等其他部門至關重要的各種功能。然而,大多數機器人的關鍵限制是它們僅能夠執行一個重復任務,例如從箱中拾取物品并將其放置在傳送帶上或根據預設模式。 鑒于這一局限性,新興的自適應機器人領域的研究人員正在關注如何使機器人更具適應性 - 并利用機械工程原理創造能...
業內人士Ross Young在推特爆料,華為Mate 40面板本月開始量產,屏幕尺寸為6.5英寸,分辨率為2340×1080。  根據此前披露的信息,華為Mate 40的屏幕尺寸為雙曲面屏,這是Mate系列標準版首次采用曲面屏設計。  此外,Mate 40系列還將推出Pro版本Mate 40 Pro,該機同樣是雙曲面屏,刷新率至少是90Hz。  根據onleaks曝光的渲染圖,Mate...
根據最新的報道,Netflix將在iPhone和iPad上推出對空間音頻的支持。Netflix的一位發言人也向MacRumors證實,這一推出正在進行中。當在Netflix中播放兼容內容時,?iPhone?和?iPad?上的控制中心將提供空間音頻選項,供運行iOS 14和iOS 15的用戶使用。使用空間音頻觀看Netflix內容需要AirPods Pro或AirPods Max。空間音頻可能不會立即提供給所有用戶...

史海拾趣

問答坊 | AI 解惑

誰用74HC245做過s51的下載線......希望大蝦們關注一下哈.......(急)

我用74HC245做的S51并行下載線, 怎么用聶忠強寫的那軟件燒寫時,檢測不到器件...... 如果有那位大俠用過,希望大蝦能把郵箱留下 。。。 哈哈......小弟一點點要求........謝謝.... 希望大蝦幫幫忙.....小弟....先謝了..... [ 本帖最后由 wang ...…

查看全部問答∨

Tieto招聘:Senior FPGA-Designer

疊拓(原迪易通)信息技術有限公司 (Tieto),成立于1968年,是一家北歐的從事軟件解決方案的全外資集團公司,分別在赫爾辛基和斯德哥爾摩證券交易所掛牌。是綜合實力北歐地區第一,歐洲前三的IT業務供應商。 請將簡歷發送到 xiaoli.yang@tieto.co ...…

查看全部問答∨

100分查內存泄漏

bool CGPSGuidsDlg::InitMap(const WCHAR* fileName) {         IImagingFactory*        pImagingFactory;         IImage*              &nb ...…

查看全部問答∨

玩過語音芯片isd1420的進來交流下編程經驗

isd1420語音芯片通過編程可以實現分段錄放音,循環放音等功能。 我今天編了下,只實現了分段錄音的功能,錄完之后怎么讓它把多段錄音一次性給放出來呢?弄不出來,做過的人請教下…

查看全部問答∨

如何進行ads7843觸摸屏的調試??

我采用ads7843進行觸摸屏數據轉換,DOUT腳始終是高電平,采集的數據始終是同樣的值8190,8190(12位 最大值) 郁悶中 ,不知如何解決,請用過ads7843的朋友指點一二。 下面是程序中讀ads7843數據部分。 // A/D 通道選擇命令字和工作寄存器 #def ...…

查看全部問答∨

04年畢業的本科兄弟們,有興趣做手機終端研發么?

如題   中興通訊 西安研究所     月薪:4500-7000,面談   如有興趣,   請電話聯系:029-88723851   郵件:bi.zehongxa@zte.com.cn      崗位要求:   嵌入式開發。   設備驅動開發。      要求:熟悉c ...…

查看全部問答∨

[求助]程序運行時會把我定義數組值改掉

在程序中作循環 執行時間比較長 若循環次數少 則改變的數組中個數少 若多加兩次循環 改變的個數就多 不知道是不是運行時ram占用過大 地址沖突? 如何看程序運行占用的ram?…

查看全部問答∨

關于數碼管顯示,程序討論

有8個數碼管,每4個為一組,使用動態掃描來實現方法一:使用兩個浮點變量作為參數 void show(float digitron1,float digitron0);              在函數里面分別去digitron1、digitron0的各個位的數值,然后通 ...…

查看全部問答∨

尋求支持MSP430F5的燒寫軟件

尋求支持MSP430F5的燒寫軟件,非常感謝~:carnation:…

查看全部問答∨

只要兩個I/O pin 的單片機接數字鍵盤電路

今天發張單片機連接 4x3 數字鍵盤的電路,作者是美國電工羅伯辛海。很多應用中,都需要接一個用單片機控制的數字鍵盤,傳統方法是用很多I/O引腳,例如接一個數字快輸盤就要7個I/O腳。在這個電路中,只需要2個I/O 引腳就可以了。 大多數時鐘I/O都 ...…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 双牌县| 同德县| 渭源县| 辰溪县| 常宁市| 柳林县| 大荔县| 桦南县| 石景山区| 达日县| 长沙市| 民县| 镇沅| 泗水县| 随州市| 大石桥市| 临漳县| 如皋市| 金堂县| 鄱阳县| 济阳县| 博野县| 绍兴县| 乌审旗| 广汉市| 宣武区| 重庆市| 盱眙县| 斗六市| 松滋市| 资中县| 定陶县| 承德市| 昆明市| 宁阳县| 宜城市| 金秀| 尼勒克县| 鲜城| 元江| 扎鲁特旗|