1. 程式人生 > >ARM之SPI協議

ARM之SPI協議

SPI是全雙工通訊,由SCL,DI,DO,CS訊號線實現通訊。

寫資料==>資料在SCL上升沿讀取:

以傳送0X56,二進位制0b01010110.(CS:低電平有效)

資料從高位開始傳,也就是bit7開始傳輸。

使用GPIO模擬SPI協議操控OLED:

  1.  OLED_CSn:SPi片選 output
  2. FLASH_CSn:FLASH片選 output
  3. OLED_DC:OLED命令資料引腳,表示當前傳輸的是命令還是資料 output
  4. SPIMISO:input(DI)
  5. SPIMOSI:output(DO)
  6. SPICLK:output

MOSI:主機輸出,從機輸入 //M===>master主機

MISO:主機輸入,從機輸出

  1. void oled_write_cmd(char cmd)
    {
       oled_DC(0);
       oled_CS(0);
       oled_data(cmd);
       oled_CS(1);
       oled_DC(1);
    }
    
    void oled_data_byte(char data)
    {
       for(int i=0;i<8;i++)
       oled_SCLK(0);
       oled_data_bit(data&0x80); //取最高位
       data<<1;
       oled_SCLK(1);
    }
    
    
    

    OLED地址:64*128位。64行分成8頁,每頁8行。每個畫素是一位,1byte是1列的8位資料。

col0 col1 col2 ... col127
page0
page1
page2
page3
page4
page5
page6
page7

怎麼把資料寫到視訊記憶體?

1.發頁地址和列地址

2.發出資料

/*
 * 字元的特點:高=寬*2,此處選澤8*16
 */

void oled_printf(int page,int col,char* str)//
{
   while(str!='\0')
   { 
      oled_pritnf_byte(page,col,str);
       col+=8;
       if(col>127)
       {
        col=0; 
        page+=2;      
       } 
      
   }
}  

void oled_printf_byte()
{
   /*得到字模*/
}