2024年5月29日 星期三

[ARM bootloader] 問題解說

 1. 組合語言和指令集是一樣的東西嗎? 網路上看到的一般在說x86或ARM的assembly好像就是在說指令集,但圖Assembly和Instruction set又是分開的,所以還是有差別?


關係像是這樣

Assembly Language -------------------Assembler----------> CPU Instruction set  







2. 講義.text section裡的有一行rodata.str1.4是什麼意思?

   .rodata.xxxx  區段也是 read only data, 但存的是程式中的常數 "字串" 
2.JPG


3. LMA load memory address我不太懂什麼時候會用到,應該是說不太知道10-118頁的ROM和RAM各是什麼角色,一般所謂的「load進memory」的memory都是指RAM嗎?

(1)ROM 存放程式的地方, RAM 執行程式的地方
但ROM這個硬體是CPU可以隨機定址的, 所以其實程式也可以在ROM上跑, 只要將程式中的變數copy 到RAM即可,但要將. text, .rodata 等也都copy到RAM也是可以的. 

(2)若VMA==LMA 則不用copy , 但VMA和LMA不同, 則要將 LMA (來源) copy 到 VMA(目的地)  
底下圖 就是VMA和LMA不同, 所以會有copy的動作
.
(3) load進memory==> memory是指RAM 




4. Linker startup code, boot.o負責copy和BSS清成0是否口誤,因為下一頁boot.o只有負責copy,start.o才是zero BSS,兩個是分開的

對, boot.o 的程式只負責copy而已




2024年4月16日 星期二

[Linux Driver] 掛載AT24 EEPROM Driver

(一) 使用sysfs 的方式操作EEPROM

Load at24 driver (eeprom) 要配合 device tree 的操作.

  step 1: 
   
   # compile dts to dtbo
    >>    dtc -@ -I dts -O dtb -o at24.dtbo at24.dts
        
   # copy to /boot/overlays  
    >> sudo cp at24.dtbo  /boot/overlays 


   # modify /boot/config.txt and add this line 

   dtoverlay=at24

  # reboot pi  

    >> sudo reboot

  
step 2: sudo modprobe at24 (載入Kernel 原生 Driver )





step3:  正常情況下會產生   /sys/bus/i2c/devices/1-0050/eeprom
                   你可以讀寫此eeprom檔案, 例如:

         sudo dd if=123.bmp of=/sys/bus/i2c/devices/1-0050/eeprom
         sudo dd of=~/dump.bin  if=/sys/bus/i2c/devices/1-0050/eeprom



=====================================================

(二) 使用字元裝置的方式操作EEPROM

掛載 i2c-dev 模組後, 會生成 /dev/i2c-1 檔案, 可利用i2c tools 工具進行讀寫









---------

at24.dts

// Definitions for I2C EEPROM (24lcxx)
// www.ittraining.com.tw
/dts-v1/;
/plugin/;

/ {
        compatible = "brcm,bcm2708";

        fragment@0 {
                target = <&i2c1>;
                __overlay__ {
                        #address-cells = <1>;
                        #size-cells = <0>;
                        status = "okay";
                     
  
eeprom@50 {
compatible = "atmel,24c02";
reg = <0x50>;  // I2C address of the AT24C02
pagesize = <8>;
size = <256>;
};
  
                        
                };
        };
        
        
};

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 板電路圖








2024年2月19日 星期一

計算題樣題-相關題型

 

※僅列相關題型”作為參考例題,為確知應試者邏輯/運算能力,實際考題文字描述或數字可能修改。

 

1.        下圖為某班數學成績的次數分配折線圖,則下列敘述哪一個正確?
(A)  
有人考100                                        (B)   恰有12人考65
(C)  
全班共有48                                      (D)   及格的人數剛好為全班人數


2.        某班男、女生共36人,調查他們喜歡的科目,如下表



下列敘述何者正確?
(A)  
全班喜歡數學的比例,和女生中喜歡數學的比例一樣多
(B)  
男生中喜歡數學的比例,比女生中喜歡數學的比例多
(C)  
男生中喜歡國文的比例,和女生中喜歡英文的比例一樣多
(D)  
男生中喜歡數學的比例,比女生中喜歡英文的比例多

3.        下圖所示為某航空公司應徵人員身高的累積相對次數分配折線圖,若初選的條件為身高 170公分以上,則初選不合格的百分比應為多少?
(A) 45%                  (B) 50%                  (C) 65%                  (D) 70%


4.        下表是某班40位學生第二次段考的數學成績,請問該班估計的平均分數應是多少?
(A) 65.25
                    (B) 66.25                    (C) 67.25                    (D) 68.25

(Hint:直方圖因為沒有原始資料, 估計平均數方法可利用組中點乘以次數求出平均數)





5.      12÷2+6÷3×2的計算結果為?
(A) 7                        (B) 10                      (C) 8                        (D) 16

6.        已知有5個數由小到大排序為 abcde,其平均數為 321,中位數為 320 10a+3510b+3510c+3510d+3510e+35 的平均數為𝑥,中位數為𝑦,則𝑥 𝑦 =
(A) 10                      (B) 35                      (C) 321                    (D) 320

7.        中午12 點,小明到同一家餐廳外帶餐點,點了4份餐後,要結帳時,看到櫃台張貼:防疫期間,外帶優惠方式:每買5 份餐,其中一個價格最便宜的餐可以免費,因此小明多買了一個香烤鯛魚飯,則小明最多只要再多付多少錢,就可以多買一個香烤鯛魚飯?
(A) 40                      (B) 30                      (C) 20                      (D) 10


8.        下圖為2017年九個國家,每百萬人器官捐贈率,則從下圖中,下列選項何者正確?
(A)
西班牙為2017 年九個國家中,器官捐贈總人數最多的國家
(B) 2017
年九個國家中,台灣器官捐贈總人數多於中國器官捐贈總人數
(C)
無法判斷葡萄牙和比利時兩國,捐贈器官總人數哪個國家多
(D) 2017
年九個國家中,香港器官捐贈總人數是第5


9. 

10.


#其他參考資料