STM32 SPI emulator (Part I) - Arduino Myanmar

Breaking

Open Arduino for Myanmar

Saturday, June 9, 2018

STM32 SPI emulator (Part I)


STM32 SPI emulator (Part I)
System Level Requirements ေတြကိုသတ္မွတ္ျပီးေတာ့ SPI emulation အေၾကာင္း
ကိုေဆြေႏြးသြားမွာျဖစ္ပါတယ္။ SPI emulator ရဲ႕ အဓိက features ေတြကိုေအာက္မွာျပထား ပါတယ္။
·        
      Simplex/full-duplex, Synchronous, Serial Communication

·         Master Operation ေတြနဲ႕ Slave Operation ေတြ
·         CPU ရဲ႕ Operating rate 168 MHz နဲ႕ Simplex mode မွာရွိတဲ့ SPI clock က 12 MHz နဲ႕အထက္ျဖစ္ပါတယ္။

·         CPU ရဲ႕ Operating rate 168 MHz နဲ႕ Full-duplex မွာရွိတဲ့ SPI Clock က 6 MHz နဲ႕အထက္ ျဖစ္ပါတယ္။

·         Programmable data word length က 8 bit နဲ႕ 16 bit ျဖစ္ပါတယ္။

·         Program ကေနသတ္မွတ္လို႕ ရတဲ့ Clock Polarity နဲ႕ Phase လည္းရွိပါတယ္။

·         MSB-first သို႕မဟုတ္ LSB-first ဆိုျပီးေတာ့ data ေတြကိုအစီအစဥ္အလိုက္ shift လုပ္လို႕လည္း ရပါတယ္။

·         GPIO ေတြအားလံုးကို SPI MOSI/MISO အျဖစ္ သတ္မွတ္ႏိုင္ပါတယ္။

·         Status Flags/interrupt အေနနဲ႕ Transmit Complete(TxC) နဲ႕ Receive Complete (RxC) ျပီး ေတာ့ ႏွစ္ခုရွိပါတယ္။


SPI emulator implementation က GPIO, timer နဲ႕ DMA peripheral ေတြအေပၚမွာ အေျခခံေနပါ တယ္။ SPI emulator ကိုျပင္ပ ပစၥည္းေတြနဲ႕ခ်ိတ္ဆက္ဖို႕ရန္အတြက္ line သံုးခုကိုအသံုးျပဳပါတယ္။ Data ေတြဟာ Tx နဲ႕ Rx mode မွာ BSRR နဲ႕ IDR registers ေတြထဲကို transmit လုပ္ပါတယ္။

Data ကူးေျပာင္းျခင္းလုပ္ငန္းစဥ္ေတြကို DMA2 က Channels ႏွစ္ခုနဲ႕အလုပ္လုပ္ပါတယ္။ Tx mode မွာ data ေတြအကးူအေျပာင္းျပဳလုပ္ဖို႕ရန္အတြက္ Channel6 Stream 1 က လုပ္ေဆာင္ပါတယ္။ Rx mode မွာ data ေတြအကူးအေျပာင္းျပဳလုပ္ဖို႕ရန္အတြက္ Channel6 Stream 2 ကလုပ္ေဆာင္ပါတယ္။ Rx signal ေတြနဲ႕ Tx signal ေတြရဲ႕ Output ေတြကို handle ျပဳလုပ္ဖို႕ရန္အတြက္နဲ႕ SPI emulator input sampling ရဲ႕ timing ကိုထိန္းခ်ဳပ္ဖို႕ရန္အတြက္ timer overflow နဲ႕ IO capture ကိုႏွိဳင္းယွဥ္တဲ့ လုပ္ငန္းစဥ္ ေတြကိုအသံုးျပဳပါတယ္။ TIM1 က Master Mode မွာ clock signal ကိုထုတ္လႊတ္ေပးပါ တယ္။ ေနာက္ေတာ့ master နဲ႕ slave mode ႏွစ္ခုစလံုးအတြက္ လိုအပ္တဲ့ speed နဲ႕ data ေတြကိုကူး ေျပာင္းဖို႕ရန္အတြက္ DMA ဆီကို request ေတြေပးပို႕ပါတယ္။

Full duplex အတြက္လိုအပ္တဲ့ peripherals ေတြဟာ Tx mode မွာအသံုးျပဳထားတဲ့ peripheral ေတြနဲ႕ Rx mode မွာအသံုးျပဳထားတဲ့ peripherals ေတြေပါင္းထားျဖစ္ပါတယ္။ ဇယားမွာ TIM1 နဲ႕ ျပထားေပ မယ့္ TIM1 နဲ႕ တူတဲ့ အျခားအျခားေသာ timers ေတြကိုလည္းအသံုးျပဳႏိုင္ပါတယ္။
SPI emulator ဟာ ျပင္ပ ပစၥည္းေတြနဲ႕ ခ်ိတ္တဲ့ ေနရာမွာ pin သံုး pin ကိုအသံုးျပဳပါတယ္။
·         MISO : Master In / Slave Out
I/O pin ေတြကေနျပင္ဆင္သတ္မွတ္ႏိုင္ပါတယ္။ Slave mode မွာ data ေတြကိုေပးပို႕ ဖို႕ရန္ အတြက္နဲ႕ Master mode မွာ data ေတြကိုလက္ခံႏိုင္ဖို႕အတြက္ MISO ကိုသံုးပါတယ္။
·         MOSI : Master Out/ Slave In
I/O pin ေတြကေနျပင္ဆင္သတ္မွတ္ႏိုင္ပါတယ္။ Master mode မွာ data ေတြကိုေပးပို႕ ဖို႕ရန္ အတြက္နဲ႕ Slave mode မွာ data ေတြကိုလက္ခံႏိုင္ဖို႕ရန္အတြက္ MOSI ကိုသံုးပါတယ္။
·         SCK: Master အတြက္ output နဲ႕ SPI slave အတြက္ Serial Clock ျဖစ္ပါတယ္။



·                                                                                                                                                                         Part II ဆက္ရန္

                                                                                                      Zaw Myat

No comments:

Post a Comment