2024年1月28日 星期日

電子電路_MCU_通訊介面

MCU單片機

微控制器(Microcontroller Unit, MCU),等同一顆小電腦(麻雀雖小五臟俱全),內含CPU、記憶體以及基本周邊單元。

ATMEL

ATMEL被microchip合併

  • ATtiny85:最陽春的MCU,也可以用UNO來寫程式(連結)
  • AVR:使用過ATUC64L3U、ATxmega64A1U、AT90S8515(KIM)
  • SAMS:這兩年大量使用SAM4S8B(連結)

ST : STM32XXX

ARM 32bit Cortex-M3CPU  72MHz,1.25DMIPS/MHz   32-512KB Flash  6-64KB SRAM
STM32F4介紹(連結) 記憶體管理(連結) ,還記得以前拿到開發板,覺得好複雜的感覺,現在卻是常常接觸。
自己有用過這個組裝一個包含列印機,MCU,相機三者的東西,不過現在仔細看看若用OpenMV,相機部分可以直接省略呢。
延伸OpenMV(連結):屬於功能整合型MCU,網站。手邊有好幾代。

忘記哪裡來的開發板
忘記哪裡來的開發板

TI : MSP430

低工耗,16bit,過去專案使用到,為了安全起見和SAM4S做對手。

ARC

架構類似ARM但不需給付授權費,工作上用了許多年(專案層次)

Arduino

使用過多種版本,例如MINI、UNO

UNO
MEGA(連結 IDE設定,處理器選1280 價格約140元)

MEGA

Arduino & Android

類似於Mega 加上一個可以連接到安卓手機的USB 主機接口。當初購買約800元(貴),連結

相較於WIFI或是藍芽,自己很喜愛單純線控的概念,只是似乎沒有後續發展。Arduino那邊使用USB CLASS,與ANDROID進行溝通,同時Android程式也要有另外的程式,才能溝通。

Arduino Mega ADK Rev3 連結  連結 Arduino Mega ADK 有一片

Freaduino ADK  連結1 有一片   Arduino Mega ADK 連結2   連結3 

XADOW

依序是RTC 擴展 藍芽 MAIN 類似振動器 電池

硬體

供電 連結 5V的USB行動電源可使用,供電孔為9V至12V,使用9V原因( 連結 )

FTDI當做連結,DRIVER是C:\Program Files (x86)\Arduino\drivers\FTDI USB Drivers 找到,用COMXX對應使用

使用上產生所謂SHIELD,將許多線路延伸出來,SHIELD各式各樣。


安裝和軟體

安裝檔(1.8.8版 下載)

void setup() {

   pinMode(LED_BUILTIN, OUTPUT);

}

void loop() {

   digitalWrite(LED_BUILTIN, HIGH);   // turn the LED on (HIGH is the voltage level)

   delay(100);                       // wait for a second

   digitalWrite(LED_BUILTIN, LOW);    // turn the LED off by making the voltage LOW

   delay(100);                       // wait for a second

}

沒有main的結構,檔案名稱為XXX.ino,系統也會自動以XXX建立同名目錄

使用第三方專案,專案位置在 C:\Program Files (x86)\Arduino\libraries 每個專案都是一個個單獨的目錄

#include “xyz.h”


複雜專案

在相同目錄下,將x.h x.c(cpp) 檔案放在同一目錄

#include “xyz.h”

就可以完成編譯

參考連結


製作屬於自己專案

參考連結

找到每個IDE設定的專案位置,位置在

IDE's File > Preferences > Sketchbook location

這裡就會看到目前的位置,資料是 C:\Users\kayjean\Documents\Arduino

在這個目錄下建立自己專案的目錄名稱PwmLed

把三個檔案放進去

libraries/PwmLed底下還可以放個examples目錄,存放範例(也就是現在正在做的事情)

Arduino OS

PORT簡單OS 超瘋狂,可當成OS學習教材(連結)

顯示TTF文字

控制相機拍照

連結

小型LED

PIN13有內建電組,可實驗LED,也可以用電路板接出(注意,長腳為正)。小功率的LED都是屬於直插式,一般都是按直徑分型號3mm 4mm 5mm 8mm 10mm 12mm。不論直徑大小,其工作電壓和工作電流都是一樣約15mA。電壓以常見的5MM來看,紅光 黃光 1.7--2.1V。白光 藍光 暖白光 粉紅光 紫色光 2.8--3.6V。綠光2.6--3.4V。

藍芽

藍芽模組

抽屜裡

ESP

ESP8266

2014上海樂鑫,內部含WIFI天線。Ai-Thinker生產的ESP-01。連結,有micropython的開發機制。ESP-12E WiFi module is developed by Ai-thinker Team. core processor ESP8266 in smaller sizes of the module encapsulates Tensilica L106 integrates industry-leading ultra low power 32-bit MCU micro, with the 16-bit short mode, Clock speed support 80 MHz, 160 MHz, supports the RTOS, integrated Wi-Fi MAC/BB/RF/PA/LNA, on-board antenna.



ESP32

2019,包含WIFI和藍芽,Tensilica Xtensa LX6微處理器。連結 RISC-V 32 位元單核心處理器

  • ESP32 有BLE功能範例(連結),因為量大所以價格最低
  • ESP32-S 主頻都到240
  • ESP32-C 主頻都到160
  • ESP32-H 主頻96 拔掉WIFI,能有單純BLE功能,較適合目前需要 連結 詳細介紹(連結)

Pixart(BLE)

主功能為BLE,可參考(連結)。僅列出呼叫系統功能寫法。

主功能為BLE,可參考(連結)。僅列出呼叫系統功能


Raspberry Pi

因為功能過多遠超過MCU單獨列出(雖然有PWM和GPIO)。有個特殊SHIELD可以讓RASPBERRY接上ARDUINO的東西。叫做alamode。


買過第三版,包括盒子、簡易的CAMERA、USB WIFI、USB滑鼠控制器






買過第四版,包括盒子、簡易的CAMERA、單門的CAMERA感應器




起初用在投影HDMI,最近打算用在lensless(尤其是LENSLESS)
搭配的螢幕




燒錄方式

JTAG (1/4)

JTAG標準協議,可以實現編程時在線調試和DEBUG。接口為電源線和復位引腳,TDI、TMS、TCK、TDO:

  • TDI-- 數據輸入,所有寫入寄存器的數據都是通過 TDI 接口串行輸入的;
  • TMS-- 模式選擇,Jlink 輸出給目標 CPU 的時鐘信號;
  • TCK-- 時鐘信號,所有數據的輸入輸出都是以該時鐘信號為基準的;
  • TDO-- 數據輸出,所有從寄存器讀出的數據都是通過 TDO 接口串行輸出的

設計電路時要選用上拉電阻。 JTAG 接口有多種形式,常用的 20 引腳、14 引腳和 10 引腳(不懂)。JTAG 接口燒錄方式常用的工具為 J-Link。

SWD (2/4)

SWD是JTAG的子集合,意法半導體的 ST-Link也支持SWD。只需要兩根線。

  • SWDIO-- 串行數據線,用於數據的讀出和寫入。
  • SWDCLK-- 串行時鐘線,提供所需要的時鐘信號。

UART (3/4) 和 燒錄方式SWIM單線 (4/4) (連結)


程式語言

一般都是C或是C++,但是多了個MicroPython

通訊介面

序列:非同步I2C

I2C的特點是只有兩條線,理論說明(連結)。(很多裝置同時支援I2C和SPI兩種介面,只要切換某個電路,就會切換)。

I2C的特色是,每種裝置會有自己特殊的代號(同型號內各個產品的代號都是相同,不像WIFI通訊裝置則是UUID每個都不同),這個代號是寫在data sheet中。比較特別的是,如果一個系統裡面有多個這種裝置怎麼辦呢?牠會用是否提供電壓,改變一些address資訊,但改來改去最多就是兩個。例如手邊的三軸感測器,LIS3DSH( 這和LIS3DH不一樣歐 ),根據datasheet(連結),所謂的位置又叫做SAD  slave address

The slave address (SAD) associated to the LIS3DSH is 00111xxb whereas the xx bits are modified by the SEL/SDO pin in order to modify the device address. If the SEL pin is connected to the voltage supply, the address is 0011101b, otherwise the address is 0011110b if the SEL pin is connected to ground. This solution permits to connect and address two different accelerometers to the same I2C lines.   0011101 : 1D   0011110 : 1E

從master角度看,配合clock的動作,將slave的位置丟到bus上,各個slave判斷位置訊號若是屬於我這個裝置,就會在最後面一個訊號結束後,將電位拉下(此時master是進入free的狀況),然後就開始一連串訊號串送過程。master的頻率可以從100k~400k範圍,而slave本身並沒有發送任何頻率的訊號,slave僅僅是在每次master的clock頻率拉起來時,進行相對應動作。(非常聰明的作法)。

系統功能,將資料寫入規定暫存器和記憶體內(透過C語言的結構功能),然後變更register就可以進行例如enable、送出資料、讀取資料等動作。

ARDINO寫I2C軟體方式(連結)。

I2C大量應用在專案中,好奇其內部究竟如何設計,找到一篇文章介紹(連結),

序列:非同步SPI

連結。SPI和I2C類似(連結),同樣可以連結多個裝置。如下圖。每個SLAVE裝置掛四條線。MASTER可掛多個裝置但會依照SS而逐漸增加,要與哪個裝置溝通,就改變對應的SSX即可。

通訊方式如下(連結),分成四種。
單工:線路上的訊號只能做單向傳送
半雙工:線路上的訊號可以雙向傳送 , 但是不能同時傳送
全雙工:線路上的訊號可以同時雙向傳送
同步:傳送端和接收端共用同一個CLOCK

SPI的速度遠高於I2C,目前只在少數螢幕上使用過。

其他的協定實在太多,可以先從這篇當作基礎。I2C、SPI、UART、RGB、LVDS,MIPI,EDP和DP。(連結)

UART


若要實現兩MCU雙邊溝通,UART是最簡單模式。除UART外進階方案是USART,兩者有很大差異。

UART

做法就是研究目前印出文字的程式對應回去
PrintDebugString位置在UARTDRIVER.c
更基本的設定是
DEBUG_MESSAGE_OUTPUT    GlobalSettings.h裡面

從設定來看UARTDriver_enInterfaceId_t
UART0   這個是DEBUG印出   和SLIM共用,只會有一個存在
UartInterface_eUart0

UART1   這個是藍芽  後來被其他的項目佔據,主要是使用USART(不是UART,很討厭)
UartInterface_eUart1

SPI  這個是和SAFETY溝通,不會用到


系統開機的時候
會使用
CommunicationDriver_ModuleSetup
    mg_stContextPort0.enInterface = UartInterface_eUart0;
    mg_stContextPort0.nBaudrate = 38400;
    mg_stContextPort1.enInterface = UartInterface_eUart1;  但是應該沒有設定到
    mg_stContextPort1.nBaudrate = 38400;  但是應該沒有設定到
    這邊順便會設定nBaudrate
而這整個項目會放在g_stModuleList,應該是在系統運作的時候就會被叫起來
實際應該是START的時候,會被叫起來,但是START躲在很裡面,不容易理解
UART0和TX RX怎麼對應呢?也沒有任何設定就這樣完成了,系統中有兩個kerneldriver,但是都沒有使用到,似乎是寫死在系統中的,非常詭異
    PIN_MCU_RX,
    PIN_MCU_TX,

宣告的時候有兩個特殊功能,好像也沒有被設定進去
UARTDriver_ActivateTunnelMode
UARTDriver_EnableEchoMode

實際使用的方式很簡單
UART0->UART_THR =(uint32_t)inChar;
while (!(UART0->UART_SR & UART_SR_TXEMPTY))
UART_SR_TXEMPTY 這個不用管


現在這個腳位被PC CONSOLE占住,最直接的方式,將這兩個腳位接到藍芽開發板的接口,嘗試看結果。

USART

LAMINGO有運作範例在最舊的版本中,目前有簡單啟動但是發現要等待,所以無法執行下去。不過這也是合理的,因為現在藍芽開發板是UART啊。

USART模式卻僅啟用UART

網路上有查詢到範例,但使用的FRAMEWORK不同,研究中

LAMINGO裡面有段程式似乎想要借用USART的宣告放進去,看起來沒有效果。


LVDS

LVDS功耗比較低,適合長距離傳輸

LVDS和MIPI的區別連結



FTDI

USB轉TTL Serial介面。轉接板(卡)或轉接線。功能:連結

  • 燒錄Arduino(ATmega微控制器),Arduino Duemilanove開發板就包含這顆晶片與電腦端溝通。
  • ATMEL,UART轉USB。
晶片有FT232R,同類型Prolific的PL-2303、Silicon Labs的CP2102。


沒有留言:

張貼留言