導航:首頁 > 編程語言 > ds2401驅動程序

ds2401驅動程序

發布時間:2023-06-13 22:22:20

⑴ 關於NRF24L01通信的問題

你這樣說沒有說明白,我這里附一份調試過的代碼,用ST的stm32晶元實現,上面的說明應該是很清楚了,你照貓畫虎基本上能成功的,試試吧。

額,好吧,後面的內容超出字數要求了,加不上去,你可以用其他方法問我要剩餘的代碼,而且這里有部分注釋因為字數的原因也被刪除了。

--------------------------------------------------------
**文 件 名: nrf24l01.c
**創 建 人: pylon_zlq
**版 本 : v0.1
**最後修改日期: 2011年10月29日
**描 述: 1. 2.4G無線模塊驅動程序
** 2. 24L01的指令分類規律讀寫寄存器為一大類,其他操作為一大類,如下:
** a. 讀寫寄存器是高三位來區分, 0b000X XXXX (read), 0b001X XXXX(write),其中 X XXXX(低5位)是
** 寄存器地址
** b. 讀接收緩存指令: 0x61(用高三位來區別其他指令, 0b011)
** c. 寫發送緩存指令: 0xA0(同上)
** d. 清TX FIFO: 0xE1(同上)
** e. 清RX FIFO: 0xE2(同上)
** f. 重使用上包數據: 0xE3(同上)
** g. NOP,空操作: 0xFF(同上)
** 3. 由於收發FIFO最多有32位元組,因此本模塊僅使用32位元組長度的數據收發
** 4. 由於通訊地址最多有5位元組,因此本模塊僅使用5位元組的通道地址(收發方一致)
** 5. 從實際使用情況來看,讀寫介面分為這么幾種:讀寫單位元組的寄存器,讀寫多位元組的通訊地址(也是寄存器的一種),
** 讀寫通訊緩存,總共6類讀寫介面

#include "includes.h"

#define NRF24L01_CE_0() {GPIO_SetBit_0(GPIOA, E_PIN_3);}
#define NRF24L01_CE_1() {GPIO_SetBit_1(GPIOA, E_PIN_3);}

#define NRF24L01_SCK_0() {GPIO_SetBit_0(GPIOA, E_PIN_5);}
#define NRF24L01_SCK_1() {GPIO_SetBit_1(GPIOA, E_PIN_5);}

#define NRF24L01_MOSI_0() {GPIO_SetBit_0(GPIOA, E_PIN_7);}
#define NRF24L01_MOSI_1() {GPIO_SetBit_1(GPIOA, E_PIN_7);}

#define NRF24L01_CS_0() {GPIO_SetBit_0(GPIOB, E_PIN_4);}
#define NRF24L01_CS_1() {GPIO_SetBit_1(GPIOB, E_PIN_4);}

#define NRF24L01_MISO_STT() (GPIO_GetLevel(GPIOA, E_PIN_6))

#define NRF24_RX_TX_LEN 32 //本模塊僅使用32位元組長度的通訊
#define NRF24_ADDR_LEN 5 //本模塊僅使用5位元組長度的通訊地址(收發方一致)

#define NFR24_RX_CH_1 0 //RX 1通道
#define NFR24_RX_CH_2 1 //RX 2通道
#define NFR24_RX_CH_3 2 //RX 3通道
#define NFR24_RX_CH_4 3 //RX 4通道
#define NFR24_RX_CH_5 4 //RX 5通道
#define NFR24_RX_CH_6 5 //RX 6通道
#define NFR24_TX_CH 6 //TX 通道

//NRF24L01寄存器操作命令
#define NRF24_READ_REG_CMD 0x00 //讀配置寄存器,低5位為寄存器地址
#define NRF24_WRITE_REG_CMD 0x20 //寫配置寄存器,低5位為寄存器地址
#define NRF24_RD_RX_PLOAD 0x61 //讀RX有效數據,1~32位元組
#define NRF24_WR_TX_PLOAD 0xA0 //寫TX有效數據,1~32位元組
#define NRF24_FLUSH_TX 0xE1 //清除TX FIFO寄存器.發射模式下用
#define NRF24_FLUSH_RX 0xE2 //清除RX FIFO寄存器.接收模式下用
#define NRF24_REUSE_TX_PL 0xE3 //重新使用上一包數據,CE為高,數據包被不斷發送.
#define NRF24_NOP 0xFF //空操作,可以用來讀狀態寄存器
//SPI(NRF24L01)寄存器地址
#define NRF24_CONFIG 0x00 //配置寄存器地址;bit0:1接收模式,0發射模式;bit1:電選擇;bit2:CRC模式;bit3:CRC使能;
//bit4:中斷MAX_RT(達到最大重發次數中斷)使能;bit5:中斷TX_DS使能;bit6:中斷RX_DR使能
#define NRF24_EN_AA 0x01 //使能自動應答功能 bit0~5,對應通道0~5
#define NRF24_EN_RXADDR 0x02 //接收地址允許,bit0~5,對應通道0~5
#define NRF24_SETUP_AW 0x03 //設置地址寬度(所有數據通道):bit1,0:00,3位元組;01,4位元組;02,5位元組;
#define NRF24_SETUP_RETR 0x04 //建立自動重發;bit3:0,自動重發計數器;bit7:4,自動重發延時 250*x+86us
#define NRF24_RF_CH 0x05 //RF通道,bit6:0,工作通道頻率;
#define NRF24_RF_SETUP 0x06 //RF寄存器;bit3:傳輸速率(0:1Mbps,1:2Mbps);bit2:1,發射功率;bit0:低雜訊放大器增益
#define NRF24_STATUS 0x07 //狀態寄存器;bit0:TX FIFO滿標志;bit3:1,接收數據通道號(最大:6);bit4,達到最多次重發
//bit5:數據發送完成中斷;bit6:接收數據中斷;
#define NRF24_MAX_TX 0x10 //達到最大發送次數中斷
#define NRF24_TX_OK 0x20 //TX發送完成中斷
#define NRF24_RX_OK 0x40 //接收到數據中斷

#define NRF24_OBSERVE_TX 0x08 //發送檢測寄存器,bit7:4,數據包丟失計數器;bit3:0,重發計數器
#define NRF24_CD 0x09 //載波檢測寄存器,bit0,載波檢測;
#define NRF24_RX_ADDR_P0 0x0A //數據通道0接收地址,最大長度5個位元組,低位元組在前
#define NRF24_RX_ADDR_P1 0x0B //數據通道1接收地址,最大長度5個位元組,低位元組在前
#define NRF24_RX_ADDR_P2 0x0C //數據通道2接收地址,最低位元組可設置,高位元組,必須同RX_ADDR_P1[39:8]相等;
#define NRF24_RX_ADDR_P3 0x0D //數據通道3接收地址,最低位元組可設置,高位元組,必須同RX_ADDR_P1[39:8]相等;
#define NRF24_RX_ADDR_P4 0x0E //數據通道4接收地址,最低位元組可設置,高位元組,必須同RX_ADDR_P1[39:8]相等;
#define NRF24_RX_ADDR_P5 0x0F //數據通道5接收地址,最低位元組可設置,高位元組,必須同RX_ADDR_P1[39:8]相等;
#define NRF24_TX_ADDR 0x10 //發送地址(低位元組在前),ShockBurstTM模式下,RX_ADDR_P0與此地址相等
#define NRF24_RX_PW_P0 0x11 //接收數據通道0有效數據寬度(1~32位元組),設置為0則非法
#define NRF24_RX_PW_P1 0x12 //接收數據通道1有效數據寬度(1~32位元組),設置為0則非法
#define NRF24_RX_PW_P2 0x13 //接收數據通道2有效數據寬度(1~32位元組),設置為0則非法
#define NRF24_RX_PW_P3 0x14 //接收數據通道3有效數據寬度(1~32位元組),設置為0則非法
#define NRF24_RX_PW_P4 0x15 //接收數據通道4有效數據寬度(1~32位元組),設置為0則非法
#define NRF24_RX_PW_P5 0x16 //接收數據通道5有效數據寬度(1~32位元組),設置為0則非法
#define NRF24_FIFO_STATUS 0x17 //FIFO狀態寄存器;bit0,RX FIFO寄存器空標志;bit1,RX FIFO滿標志;bit2,3,保留
//bit4,TX FIFO空標志;bit5,TX FIFO滿標志;bit6,1,循環發送上一數據包.0,不循環;

static const uchar gCuc_TXAddr[NRF24_ADDR_LEN]={0x34,0x43,0x10,0x10,0x01}; //發送地址
static const uchar gCuc_RXAddr[NRF24_ADDR_LEN]={0x34,0x43,0x10,0x10,0x01}; //發送地址

uchar guc_TXRX_Stt;

/*********************************************************************************************************
**函數名稱: void NRF24L01Initial(void)
**輸入: none
**輸出: none
**說明: PA3---WIRELESS_CE, PA5---SCK, PA6---MISO, PB4---WIRELESS_CS, PA7---MOSI, PA2---WIRELESS_INT
**/
void NRF24L01Initial(void)
{
//1.配置io口線時鍾
RCC_APB2ENR |= IOPAEN+IOPBEN; //port a, port b,
RCC_APB2RSTR &= ~(IOPAEN+IOPBEN); //port a, port b,

//2.配置io口,SCK,MOSI,MISO三根線交由spi外設自動控制,其初始化也交由spi驅動程序完成
//WIRELESS_CE, output
SetOutput(GPIOA, E_PIN_3, E_OUT_PP, E_OUT_SPD_50M);
//WIRELESS_INT, pull up input
SetInput(GPIOA, E_PIN_2, INPUT_TYPE_FLOAT, E_IN_PULL_UP);
//WIRELESS_CS, push-pull output
SetOutput(GPIOB, E_PIN_4, E_OUT_PP, E_OUT_SPD_50M);

//這個是防止flash片在cs變低可能造成的MISO線電平沖突的問題
SetOutput(GPIOB, E_PIN_6, E_OUT_PP, E_OUT_SPD_50M);
GPIO_SetBit_1(GPIOB, E_PIN_6);

//3. enable rnf24l01, unselect rnf24l01
NRF24L01_CE_0();
NRF24L01_CS_1();

guc_TXRX_Stt = 0;
}

⑵ PCB抄板中,黑點晶元(點膠晶元(軟膠晶元))如何知道型號,或者怎麼替代原有晶元。

PCB抄板中,黑點晶元(點膠晶元(軟膠晶元)這種軟封裝的晶元,往往是和PCB板做成一體的,有的印有型號,也有的沒印型號,有型號的可以按照型號尋找有標准封裝的代替,或找到COB封裝的PCB板,也可以花錢找專業解密的公司破解。大多數這種晶元價格很低,不值得花錢去破解,人家不印型號,就是為了保密防止你仿製。如果你不在乎花錢,就有可能破解,但是不能保證一定成功,在於破解的人員技術水平,破解也是有難度的。需要解剖晶元,和抄板一樣,進行逆向設計,難度更大些。

⑶ 電腦服務和埠問題,謝謝!

如果你裝了的金山網鏢,那就很簡單了,你打開網鏢後,切換到「網路狀態」標簽窗口,那裡面就列出了所有正在使用網路通信的進程,點擊想看的進程,就會自動展開詳細信息,其中就包括了該進程使用的埠信息,當然還有進程的本地文件等其它信息!我想這應該是你要的簡單方便的查詢方式吧!

⑷ 如何把STC單片機里的代碼讀出來

這個需要單片機解密

單片機解密
單片機解密又叫單片機破解,晶元解密,IC解密,但是這嚴格說來這幾種稱呼都不科學,但已經成了習慣叫法,我們把CPLD解密,DSP解密都習慣稱為單片機解密。單片機只是能裝載程序晶元的其中一個類。能燒錄程序並能加密的晶元還有DSP,CPLD,PLD,AVR,ARM等。當然具存儲功能的存儲器晶元也能加密,比如DS2401 DS2501 AT88S0104 DM2602 AT88SC0104D等,當中也有專門設計有加密演算法用於專業加密的晶元或設計驗證廠家代碼工作等功能晶元,該類晶元業能實現防止電子產品復制的目的。
單片機攻擊者藉助專用設備或者自製設備,利用單片機晶元設計上的漏洞或軟體缺陷,通過多種技術手段,就可以從晶元中提取關鍵信息,獲取單片機內程序這就叫單片機解密。

解密過程

揭去晶元封裝
侵入型攻擊的第一步是揭去晶元封裝(簡稱「開蓋」有時候稱「開封」,英文為「DECAP」,decapsulation)。
有兩種方法可以達到這一目的:
第一種是完全溶解掉晶元封裝,暴露金屬連線。
第二種是只移掉硅核上面的塑料封裝。
第一種方法需要將晶元綁定到測試夾具上,藉助綁定台來操作;第二種方法除了需要具備攻擊者一定的知識和必要的技能外,還需要個人的智慧和耐心,但操作起來相對比較方便,完全家庭中操作。
晶元上面的塑料可以用小刀揭開,晶元周圍的環氧樹脂可以用濃硝酸腐蝕掉。熱的濃硝酸會溶解掉晶元封裝而不會影響晶元及連線。該過程一般在非常乾燥的條件下進行,因為水的存在可能會侵蝕已暴露的鋁線連接 (這就可能造成解密失敗)。

清洗晶元
接著在超聲池裡先用丙酮清洗該晶元以除去殘余硝酸,並浸泡。
尋找保護熔絲的位置並破壞
最後一步是尋找保護熔絲的位置並將保護熔絲暴露在紫外光下。一般用一台放大倍數至少100倍的顯微鏡,從編程電壓輸入腳的連線跟蹤進去,來尋找保護熔絲。若沒有顯微鏡,則採用將晶元的不同部分暴露到紫外光下並觀察結果的方式進行簡單的搜索。操作時應用不透明的紙片覆蓋晶元以保護程序存儲器不被紫外光擦除。將保護熔絲暴露在紫外光下5~10分鍾就能破壞掉保護位的保護作用,之後,使用簡單的編程器就可直接讀出程序存儲器的內容。
對於使用了防護層來保護EEPROM單元的單片機來說,使用紫外光復位保護電路是不可行的。對於這種類型的單片機,一般使用微探針技術來讀取存儲器內容。在晶元封裝打開後,將晶元置於顯微鏡下就能夠很容易的找到從存儲器連到電路其它部分的數據匯流排。由於某種原因,晶元鎖定位在編程模式下並不鎖定對存儲器的訪問。利用這一缺陷將探針放在數據線的上面就能讀到所有想要的數據。在編程模式下,重啟讀過程並連接探針到另外的數據線上就可以讀出程序和數據存儲器中的所有信息。
藉助顯微鏡和激光切割機破壞保護熔絲
還有一種可能的攻擊手段是藉助顯微鏡和激光切割機等設備來尋找保護熔絲,從而尋查和這部分電路相聯系的所有信號線。由於設計有缺陷,因此,只要切斷從保護熔絲到其它電路的某一根信號線(或切割掉整個加密電路)或連接1~3根金線(通常稱FIB:focused ion beam),就能禁止整個保護功能,這樣,使用簡單的編程器就能直接讀出程序存儲器的內容。
雖然大多數普通單片機都具有熔絲燒斷保護單片機內代碼的功能,但由於通用低檔的單片機並非定位於製作安全類產品,因此,它們往往沒有提供有針對性的防範措施且安全級別較低。加上單片機應用場合廣泛,銷售量大,廠商間委託加工與技術轉讓頻繁,大量技術資料外瀉,使得利用該類晶元的設計漏洞和廠商的測試介面,並通過修改熔絲保護位等侵入型攻擊或非侵入型攻擊手段來讀取單片機的內部程序變得比較容易。

閱讀全文

與ds2401驅動程序相關的資料

熱點內容
省內圓通快遞寄文件夾需要多少錢 瀏覽:740
iphone程序加密 瀏覽:884
win10文件夾調整文件行高 瀏覽:681
創意手繪教程 瀏覽:754
微信刪除帳號信息 瀏覽:596
mysql操作類文件 瀏覽:649
繞過xp密碼 瀏覽:158
大眾速騰專用app有哪些 瀏覽:455
arpa首先將計算機網路劃分為 瀏覽:617
蘋果系統開機音樂 瀏覽:875
windows8顯示隱藏文件 瀏覽:603
ipad2可以升級到92嗎 瀏覽:857
如何打開ps保存的文件 瀏覽:744
幼兒編程教育有哪些 瀏覽:453
汽車發外地用什麼app 瀏覽:810
網路如何贊美女人漂亮 瀏覽:143
如何把桌面文件放到excel裡面 瀏覽:363
照片文件名是怎麼查的 瀏覽:876
c怎麼在cmd模式下顯示文件 瀏覽:325
手機怎麼把文件夾的圖片移到相冊 瀏覽:440

友情鏈接