编辑: 木头飞艇 | 2016-05-04 |
0 R/W=1 D5 D4 D3 D2 D1 D0 D5~D0 为对应的寄存器地址;
数据(24Bit)格式(高字节在前,低字节在后) 高字节(8Bit) 中间字节(8Bit) 低字节(8Bit) 4. 在/CS 片选信号拉低开始操作 SPI 端口之前,请确保 SCLK、DIN 为低电平;
5. SPI 软复位功能;
通过连续向 BL6523B 写入
8 个字节的 FFH,SPI 通信模块可复位;
SPI 读写的典型时序图 例:写15H 寄存器 写入值 AAAH BL6523B 单相多功能电能计量 应用指南 5/15 v1.2 波形
1 为DOUT,波形
2 为SCLK.波形
3 为DIN;
例:读15H 寄存器 读出值 AAAH 波形
1 为DOUT,波形
2 为SCLK.波形
3 为DIN;
SPI 读写例程 void SPI_Read(u8 Cmd) //SPI Read data { s8 n,m;
BL6523B 单相多功能电能计量 应用指南 6/15 v1.2 GPIO_WriteHigh(SPI_PORT,SPI_CS);
//CS 片选为高电平 Delay(2);
GPIO_WriteLow(SPI_PORT,SPI_SCLK);
//SCLK 为低电平 Delay(2);
GPIO_WriteLow(SPI_PORT,SPI_CS);
//CS 片选为低电平, 开启 SPI 端口 Delay(2);
//发送命令字节 for(n=7;
n>=0;
n--) { GPIO_WriteLow(SPI_PORT,SPI_SCLK);
//SCLK=0 Delay(2);
if(ValBit(Cmd,n)==0) //MCU 从命令字节的最高 位开始发送数据到 DIN 管脚 GPIO_WriteLow(SPI_PORT,SPI_DIN);
else GPIO_WriteHigh(SPI_PORT,SPI_DIN);
Delay(2);
GPIO_WriteHigh(SPI_PORT,SPI_SCLK);
//SCLK=1;
在SCLK 的上 升沿 DIN 上的数据被移入 BL6523B Delay(2);
} GPIO_WriteLow(SPI_PORT,SPI_SCLK);
//SCLK=0 Delay(18);
//BL6523B 从DOUT 管脚输出
3 个字节的数据 for(m=2;
m>=0;
m--) { for(n=7;
n>=0;
n--) { GPIO_WriteHigh(SPI_PORT,SPI_SCLK);
//SCLK=1 Delay(2);
GPIO_WriteLow(SPI_PORT,SPI_SCLK);
//SCLK=0 Delay(2);
//MCU 从DOUT 管脚接收数据 BL6523B_Data_Read[m]=BL6523B_Data_Read[m]=0;
m--) { for(n=7;
n>=0;
n--) { GPIO_WriteLow(SPI_PORT,SPI_SCLK);
//SCLK=0 if((BL6523B_Data_Write[m]&((u8)1