2024年3月25日 星期一

[Linux Driver] 技術回覆整理

 

Q0: Driver 開發方式為何?


Ans: 

請參考"Linux Driver開發的模式"  https://blog.ittraining.com.tw/2024/02/linux.html

 

Q1: 在Linux 驅動程式-> Linux GPIO host control 的bcm2708_gpio.c 是在哪個路徑下?


Ans: 課程使用的是kernel 4.4.x , 其關於bcm2708_gpio.c 改為 driver_gpio.c
路徑位於 /home/pi/linux-raspberrypi-kernel_1.20190401-1/drivers/bcma



Q2: 為何在範例"LinuxDriver_Data_20191001 \Code\14-GPIO-RPI_H\gpio.c"裡

只有定義

MODULE_LICENSE("GPL");
MODULE_AUTHOR("ittraining.com.tw");
MODULE_DESCRIPTION("A Simple GPIO Device Driver module for RaspPi");

而沒有定義
module_init();
module_exit();

Ans:

原始module 進入及離開點, 都是固定這個名字,
int init_module(void)
void cleanup_module(void)

若想要換別的名字,可以用以下巨集代換成別的名字.
module_init(led_init_module);
module_exit(led_remove_module);

Q3: 02_BTN_LED 裡的local_irq_save(flags), 禁止的irq是button_irq, 對嗎?

Ans:  不是. 

local_irq_save(flags)   //是對本次被中斷的CPU, 禁止它再接受何任何中斷

/*the critical section of code*/
.
local_irq_restore(flags) //還原被中斷前的CPU狀態


Q4:  Raspberry Pi 開發板接上電源後(I/O板接電腦USB埠, 主板接USB電源), 開機訊息或是下dmesg會常出現以下:

[ 10.391505] Under-voltage detected! (0x00050005)
[ 14.561447] Voltage normalised (0x00000000)

Ans:  其實可以略過此訊息, 但如果要消除此訊息.. 另外購買 2.5A power supply 供電, 不能用PC的 USB供電,因為電腦電流供應不足.

Q5:   關於中斷控制器

   這個local arm周邊的 具體是甚麼樣的周邊 請舉例
   這些周邊也接到GPU的中段控制器裡嗎? 
   另外, 中斷控制器有沒有在GPU裡?
   bcm2835 GPU ARM內部的IP簡圖去哪查?

Ans: 


(1) 來自ARM內部本身的中斷, 主要就是ARM 內部timer和作為和GPU溝通界面(Mailbox)的中斷通知
(2) 不知道,但也不用管GPU內部的中斷控制器
(3) 沒有, 我們講的中斷控制器是用來通知ARM 而己
(4)   Hardware architecture:   GPU ----> Interrupt controller ---> ARM


   資料來源: BCM2835-ARM-Peripherals  Ch7 Interrupts

 

Q5: 如何自己編譯核心或準備本機開發模式

請參閱 "Quick guide for building Raspberry Pi kernel 4.4.x"


Q6:

暫存器的確有可能因為中斷而改變狀態,但不懂得是明明已經說是存取暫存器
並不是一般放在記憶體的變數, 根本沒所謂保存在記憶體裡阿




上面這段描述是不是錯的?  我看gpio dirver也沒有加所以volatile?






Ans: 

(1) 現在計算機架構採用Memory-mapped I/O ,  將Peripheral Register  (Special Function Register)也映射在記憶體的一個區段, 所以存取週邊亦等同於存取記憶體.
   
(2)也許  readl 函式宣告像這樣.  readl (volatile uint32_t* paddr)

Q6 :電壓準位的問題

  Ans: 



2024年3月1日 星期五

艾鍗學院ARM MCU Board - NEW


艾鍗ARM MCU  實驗套件採用新唐 M482LE8AE (NuMicro® M482 USB OTG 系列)



MCU:

  • 新唐 M482LE8AE (NuMicro® M482 USB OTG 系列)
  • 高達 192 MHz Arm® Cortex®-M4F 核心
  • 128 KB 快閃記憶體,支援 eXecute-Only-Memory ( XOM )
  • 64 KB RAM,包含 32 KB 硬體奇偶校驗


電源: USB 輸入電源 5V,500mA 自復型保險絲限流保護,系統穩壓 3.3V


燒錄除錯器:  DAPLink


USB:  

USB 2.0 全速裝置/主機/OTG 控制器及內置 PHY


GPIO:

一組 1602 文字型 LCD

on board 輸入按鍵 x1

一組步進馬達及控制器模組


12bits SAR ADC:

AD 通道 12:10K 熱敏電阻(on board)

AD 通道 13:100K VR(on board)


12bits DAC: 1 組 DAC 輸出通道


16bits PWM:

PWM1_1:蜂鳴器 Buzzer

PWM1_2:Capture mode 紅外線收發模組(on board)


UART:

CH340G USB 模組 (UART1)

ESP8266 WiFi 模組 (UART1)


I2C: BH1750 照度計

SPI: NRF24L01P 2.4G 無線通訊模組



M482LE8AE晶片規格資料:

核心
  - 高達 192 MHz Arm® Cortex®-M4F 核心
  - DSP 指令集
  - 記憶體保護單元
   
記憶體
  - 128 KB 快閃記憶體,支援 eXecute-Only-Memory ( XOM )
  - 64 KB RAM,包含 32 KB 硬體奇偶校驗
  - 2 KB 一次性燒錄區塊 ( OTP )
   
循環冗餘校驗 ( CRC ) 單元
   
16 通道周邊 DMA 控制器
   
外部匯流排介面
  - LCD 平行介面,i80 模式
   
時脈源 ( Clocks )
  - 4 到 24 MHz 晶振
  - RTC 用 32 kHz 振盪器
  - 內部 48 MHz RC 振盪器 ( X-less )
  - 內部 12 MHz RC 振盪器
  - 內部 10 kHz RC 振盪器
   
RTC
  - 獨立 VBAT 電源輸入
  - 20 位元組備份暫存器
   
計時器和 PWM
  - 4 個 32 位元計時器
  - 12 路增強型 PWM ( 12 個 16 位元計時器 )
  - 12 路基本型 PWM ( 2 個 16 位元計時器 )
  - 1 個 24 位元倒數 SysTick 計時器
  - 1 個看門狗計時器
  - 1 個視窗看門狗計時器
類比周邊
  - 1 個 12 位元,多達 12 通道 5 MSPS SAR ADC
  - 1 個 12 位元 1 MSPS DAC
  - 2 個滿擺幅 ( Rail-to-rail ) 比較器
   
通訊介面
  -

多達 8 個低功耗 UART 介面 ( 17 Mbps ) ,包含 2 個 LIN 介面

  - 1個 ISO-7816 介面 ( 3.4 MHz ) ,支援全雙工 UART 模式
  - 3 個 I²C 介面 ( 可達 3.4 Mbps )
  - 2 個四線 SPI 介面 ( 可達 96 MHz )
  - 多達 2 個 SPI /I²S 介面 ( SPI 可達 96 MHz 、I²S 可達 192 kHz/16-bit )
  - 1 個 I²S 介面 ( 192 kHz/32-bit )
  - 1 個 SD 卡控制器 ( 50 MHz )
   
控制介面
  - 個正交編解碼介面 ( QEI )
  - 個 24 位元 通道輸入捕捉計數器單元
   
影像輸入介面
  - CMOS 感測器介面帶有硬體 1 位元亮度輸出
    
進階連結
  - USB 2.0 全速裝置/主機/OTG 控制器及內置 PHY
   
操作特性
  - 電壓範圍: 1.8V to 3.6 V
  - 溫度範圍: - 40 ℃ to 105 ℃
     
符合 IEC-60730 Class B
   
加解密引擎
  - AES-256
  - 真亂數產生器



資源連結:
1. M482LE8AE晶片規格
2. 艾鍗ARM Cortex M4 板電路圖