高通字库
版本 V1.0 · 更新于 2026-05-23

4.2 软件模拟 SPI 驱动参考

无需硬件 SPI 外设,GPIO 模拟实现

软件模拟 SPI

当 MCU 硬件 SPI 资源不足或需要更灵活的引脚分配时,可用 GPIO 模拟 SPI 时序。 以下代码适配任意平台,仅需 4 个 GPIO 引脚。

spi_soft.c
#define Rom_csH     P1_1 = 1
#define Rom_csL     P1_1 = 0
#define MOSIH       P1_2 = 1
#define MOSIL       P1_2 = 0
#define Rom_sckH    P1_3 = 1
#define Rom_sckL    P1_3 = 0
#define MISO        P1_4

void zk_init(void)

void Send_Byte(unsigned char out)

}

unsigned char Get_Byte(void)
{
    unsigned char i;
    unsigned char read_dat;

    Rom_sckH;
    for(i=0;i<8;i++)

    return(read_dat);
}

void SPI_Address(unsigned char AddH,unsigned char AddM,unsigned char AddL)

unsigned long r_dat_bat(unsigned long address,unsigned long DataLen,unsigned char *pBuff)
{
    unsigned long i;
    unsigned char addrHigh;
    unsigned char addrMid;
    unsigned char addrLow;
    addrHigh=address>>16;
    addrMid=address>>8;
    addrLow=(unsigned char)address;

    Rom_csL;
    Send_Byte(0x03);
    SPI_Address(addrHigh,addrMid,addrLow);
    for(i=0;i<DataLen;i++)
        *(pBuff+i)=Get_Byte();
    Rom_csH;
    return i;
}

unsigned char gt_read_data(unsigned char* sendbuf , unsigned char sendlen , unsigned char* receivebuf, unsigned int receivelen)

    for(i = 0; i < receivelen;i++)

    Rom_csH;
    return 1;
}