stm32學(xué)習筆記--spi與iic
//讀ADXL345寄存器
//addr:寄存器地址
//返回值:讀到的值
u8 ADXL345_RD_Reg(u8 addr)
{
u8 temp=0;
IIC_Start();
IIC_Send_Byte(ADXL_WRITE); //發(fā)送寫(xiě)器件指令
temp=IIC_Wait_Ack();
temp=IIC_Wait_Ack();
IIC_Start(); //重新啟動(dòng)
IIC_Send_Byte(ADXL_READ); //發(fā)送讀器件指令
temp=IIC_Wait_Ack();
return temp; //返回讀到的值
}
這段寫(xiě)寄存器代碼,不理解temp為什么要被頻繁的賦值,去掉后,宏觀(guān)看來(lái)對結果沒(méi)有影響。第二個(gè)不理解的地方是為什么在發(fā)送寄存器地址之后要從新啟動(dòng)一次,因
為在相似的寫(xiě)寄存器函數中,在相同的位置不存在重啟代碼。注釋掉該句之后顯示“ADXL345 error”。
這兩天主要看了三軸加速度計的程序,雖然例程里的能看懂,但是在四軸里的程序卻不那么容易,我甚至不明白為什么他要自己寫(xiě)一個(gè)iic的函數,我打算接下來(lái)把它的
程序和例程里的程序對照來(lái)看,看能不能找到什么頭緒。
下面是對以前學(xué)過(guò)內容的總結:
對位的尋址操作
為了實(shí)現對SARM、I/O外設空間中某一位的操作,在尋址空間(4GB)另一地方取個(gè)別名區空間,從這地址開(kāi)始,每一個(gè)字(32bit)就對應SRAM或I/O的一位。即原來(lái)每
個(gè)字節用一個(gè)地址,現在給字節中的每個(gè)位一個(gè)地址,實(shí)現了對位的尋址。
spi與iic之間各自的優(yōu)劣
1 硬件連接的優(yōu)劣
SPI是[單主設備( single-master )]通信協(xié)議,這意味著(zhù)總線(xiàn)中的只有一支中心設備能發(fā)起通信。當SPI主設備想讀/寫(xiě)[從設備]時(shí),它首先拉低[從設備]對應
的SS線(xiàn)(SS是低電平有效),接著(zhù)開(kāi)始發(fā)送工作脈沖到時(shí)鐘線(xiàn)上,在相應的脈沖時(shí)間上,[主設備]把信號發(fā)到MOSI實(shí)現“寫(xiě)”,同時(shí)可對MISO采樣而實(shí)現“讀”。
主從設備必須使用相同的工作參數——SCLK、CPOL 和 CPHA,才能正常工作。如果有多個(gè)[從設備],并且它們使用了不同的工作參數,那么主設備必須在讀寫(xiě)不同從設
備間重新配置這些參數。
I²C 是多主設備的總線(xiàn),I²C沒(méi)有物理的芯片選擇信號線(xiàn),沒(méi)有仲裁邏輯電路,只使用兩條信號線(xiàn)—— „serial data? (SDA) 和 „serial clock? (SCL)。
從上面的分析可以看出,在需要多個(gè)從設備的時(shí)候,iic比spi需要更少的信號線(xiàn)。
2 速度比較
spi為全雙工,速度可以達到10M,而iic快速模式為1M,需要額外I/O緩沖區的高速模式也才3.4M。
3 總結
SPI的優(yōu)點(diǎn)在于-------它的結構相當的直觀(guān)簡(jiǎn)單,容易實(shí)現,并且有很好擴展性。SPI的簡(jiǎn)單性不足稱(chēng)其優(yōu)雅,因為要用SPI搭建一個(gè)有用的通信平臺,還需要在SPI之上構建特定的通信協(xié)議軟件。也就是說(shuō)要想獲得SPI特有而IIC沒(méi)有的特性——高速性能,工程師們需要付出更多的勞動(dòng)。另外,這種自定的工作是完全自由的,這也說(shuō)明為什么SPI沒(méi)有官方標準。I²C和SPI都對低速設備通信提供了很好的支持,不過(guò),SPI適合數據流應用,而I²C更適合“字節設備”的多主設備應用。
評論