2018年2月27日 星期二

來揚(Lytek) PSRAM簡單讀寫範例

之前有看過OpenQSignage開源迷你電子看板(Arduino LCD動畫胸牌) (https://omnixri.blogspot.tw/2018/01/openqsignagearduino-lcd.html)專案的朋友向我反應,來揚科技的PSRAM看起來好像很不錯,但開源的程式太長不容易消化,可否提供一簡單版本,只有讀寫一個字元組(Byte)的範例。為了大家更容易了解使用方式,我重新整理了一段Arduino程式供大家參考,希望對大家有用。



接線圖請參考 OpenQSignage開源迷你電子看板(Arduino LCD動畫胸牌)#1_硬體設計說明 圖三。

// Lytek PSRAM 讀寫測試程式
// 從UART接收一BYTE(ASCII),寫入PSRAM,再從PSRAM讀出,送回UART(16進制顯示)
// 作者:歐尼克斯實境互動工作室 OmniXRI Jack Hsu
//       Feb. 2018

#include <SPI.h> // 引入驅動SPI函式庫,應用於SPI PSRAM

// 來揚科技(Lyontek) SPI PSRAM LY68L6400 I/O設定
int PIN_PSRAM_CE = 10;  // 晶片選擇線, Arduino PB2
int PIN_PSRAM_SI = 11;  // 串列資料輸入線, Arduino PB3
int PIN_PSRAM_SO = 12;  // 串列資料輸出線, Arduino PB4
int PIN_PSRAM_SCK = 13; // 時脈線, Arduino PB5

int  rx_data;           // 接收URART資料
char tx_data;           // 從UART發送資料

// Arduino初始化程式
void setup() { 
  // 初始化UART通訊埠(COM Port)
  Serial.begin(57600);        // 設定通訊鮑率為57,600bps(可自由設定)
 
  // 初始化SPI串列埠為控制來揚科技(Lyontek) SPI PSRAM LY68L6400
  pinMode(PIN_PSRAM_CE, OUTPUT);
  SPI.begin();                          // 啟動SPI
  SPI.setBitOrder(MSBFIRST);            // 設定SPI為高位元先送模式
  SPI.setDataMode(SPI_MODE0);           // 設定SPI為模式0(CPOL,CPHA皆為零,即資料SI/SO備妥後CLK再以正緣觸發)
  SPI.setClockDivider(SPI_CLOCK_DIV2);  // 為外頻再除以2,3.3V Arduino外頻為8MHz,所以SPI時脈為4MHz
}

// Arduino無限循環程式段
void loop() {
  if (Serial.available() > 0) {     // 假若UART未接收到任何資料則略過
    rx_data = Serial.read();        //
   
    digitalWrite(PIN_PSRAM_CE, LOW);// SPI PSRAM 晶片選擇線設為低電位
    // 設定 SPI PSRAM寫入起始位置   
    SPI.transfer(0x02);             // 寫入PSRAM寫入命令0x02
    SPI.transfer(0);                // 寫入PSRAM位址 bit 23 ~ 16
    SPI.transfer(0);                // 寫入PSRAM位址 bit 15 ~ 8
    SPI.transfer(0);                // 寫入PSRAM位址 bit 7 ~ 0        
    SPI.transfer( (char)rx_data);   // 將讀入資料寫入PSRAM(位址自動加一) 
    digitalWrite(PIN_PSRAM_CE, HIGH);// SPI PSRAM 晶片選擇線設為高電位
  
    digitalWrite(PIN_PSRAM_CE, LOW);// SPI PSRAM 晶片選擇線設為低電位
    // 設定 SPI PSRAM讀取起始位置
    SPI.transfer(0x03);             // 寫入PSRAM低速讀取命令0x03
    SPI.transfer(0);                // 寫入PSRAM位址 bit 23 ~ 16
    SPI.transfer(0);                // 寫入PSRAM位址 bit 15 ~ 8
    SPI.transfer(0);                // 寫入PSRAM位址 bit 7 ~ 0
       
    tx_data = SPI.transfer(0);
    digitalWrite(PIN_PSRAM_CE, HIGH);// SPI PSRAM 晶片選擇線設為高電位
   
    Serial.println(tx_data, HEX);  
  }

沒有留言:

張貼留言

【頂置】簡報、源碼、系列文快速連結區

常有人反應用手機瀏覽本部落格時常要捲很多頁才能找到系列發文、開源專案、課程及活動簡報,為了方便大家快速查詢,特整理連結如下,敬請參考! Edge AI Taiwan 邊緣智能交流區 全像顯示與互動交流區 台科大(NTUST) 人工智慧與邊緣運算實務 開南大學...