全能電路設計實戰

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)


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)  
全班共有46                                      (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


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


#其他補充

2024年2月2日 星期五

Linux Driver開發的模式


本機開發模式:

 人在本機上直接開發Driver, 本機可以是PC或Raspberry pi 這類的機器. 當然你要能進入到本機裡開發.  Toolchain 就是編譯程式碼的相關工具, 這個工具必須配合本機的作業系統環境而安裝.編譯程式所編譯出來的code 是可以直接在本器上執行的。

P.S. 艾鍗提供的Linux Driver 課程是刻意準備成本機開發模式給學員使用和學習的, 是為了把學習重點放在"Linux Device Driver "上學習的. 不要花太多時間在其他嵌式入開發的支微末節, 就好像學習"Window Device Driver"一樣, 先專注Driver軟體架構和流程。







嵌入式開發模式:


通常本機就是PC. 而Target端是MCU/SoC開發板,當然也是可以Raspbeery Pi , 把Pi當作是一個Target 端. 人在本機上直接開發Driver, 要先安裝好Toolchain 即編譯程式碼的相關工具, 這個工具必須配合本機的作業系統環境而安裝,但他的compiler 稱作Cross-compiler 因為它產出的code給Tareget 端執行的, 而且本機因為通常和Tareget 端CPU不同並無法執行此code。



 

2024年1月6日 星期六

3種不同的Bus bridge 連接HPS (ARM SoC)和 FPGA

FPGA Fabric 內部元件連接使用的是Avalon Bus, 而ARM SoC 內部使用 AXI Interface.

Intel  SoC FPGA 解決方案使用可以使用3種不同的bridge 連接HPS (ARM SoC)和 FPGA

  1. HPS-to-FPGA Bridge : HPS ---> FPGA (for high perfromancee data transfer)
  2. Lightweight HPS-to-FPGA Bridge: HPS ---> FPGA (for low perfromancee , fixed 32bit data width,tune for latency. suitable for control and status register access)
  3. FPGA-to-HPS Bridge: FPGA---> HPS 



學習課程連結:

2023年11月21日 星期二

使用OpenAI 的LLM


OpenAI 目前提供的API 種類有這些: 


但使用這些API ,要先在 OpenAI https://platform.openai.com/ 註冊並取得API Key 才能呼叫。但取得API  Key 是需要付費的。 使用 Free trial  API Key 須付 5塊美金,此 Key 有效期為 3 個月。到期後,必須填寫信用卡資訊轉換成付費帳戶。

針對不同的AI模型, 如 聲音識別的 whisper-1, 文字生成影像 dall-e-2, 大型語言模型(LLM) gpt-3.5-turbo , 均有不同的使用資費。如下



1. GET API Key

 1. First, create an OpenAI account or sign in. Next, navigate to the API key page and "Create new secret key", optionally naming the key

2. Install the OpenAI Python library

 > pip install  openai langchain 

3. 程式測試