原创 VL53L0X調試總結

最近調VL53L0X花了不少時間,特總結下 https://www.st.com/content/st_com/en/search.html#q=vl53l-t=products-page=1 VL53L0X測距2m  VL53L1X測距

原创 Linux下的DMA學習

       最近在忙一個豎屏轉橫屏項目,使用的是spi接口的豎屏(cpu不帶dpu,橫屏lcd比豎屏lcd成本高),使用的方案就是利用dma的特性,將橫屏的數據進行一定規則的搬運(設置dma的搬運規則,從左下角搬運第一列作爲第一行,搬完

原创 手機平臺強制進下載模式方式

mtk     KPCOL0+GND sprd   1.KEYIN0+KEYOUT0;2.KEYIN0+GND;3.U1TXD+GND qcom   FORCE_USB_BOOT+GND,各平臺使用的gpio有差異,在原理圖中搜索FORC

原创 記一次misc_register註冊失敗

        在看內核log時,發現有一個misc_register註冊失敗的warning。一開始以爲配置的參數有誤,看代碼也使用了參數MISC_DYNAMIC_MINOR,不太可能出現註冊失敗的情況。 int misc_regis

原创 USB驅動之二控制器驅動(musb)

對於mtk和sprd的usb控制器驅動都是musb,qcom的是dwc2/dwc3,拿musb來學習下。 現在嵌入式設備USB都支持主從了,控制器也分爲兩部分,一部分是HCD,一部分是UDC。OHCI(open host controll

原创 Linux下syscall分析

先看如何增加系統調用 diff --git a/kernel4.4/arch/arm/include/uapi/asm/unistd.h b/kernel4.4/arch/arm/include/uapi/asm/unistd.h in

原创 Linux下的按鍵驅動

某主板按鍵dts配置如下 gpio_keys { compatible = "gpio-keys"; input-name = "gpio-keys"; status = "okay";

原创 Linux下hrtimer demo

Kernel有兩種定時器,一種是傳統的低精度定時器timer,另一種是高精度定時器hrtimer。先來看下hrtimer的使用 #include <linux/module.h> #include <linux/hrtimer.h> #

原创 Linux下的dump_stack

當kernel出現錯誤時,會打印堆棧信息,我們可以根據信息追溯問題的來源,該函數實行如下 /** * dump_stack - dump the current task information and its stack trace

原创 vfs概念

     Linux讀寫文件的一個demo如下,運行後系統死機了,原因是f->f_op->write爲NULL,導致空指針,將 f->f_op->write換成vfs_write代碼正常運行 static int stmvl53l0x_

原创 記一次gpio喚醒調試

使用TP的IRQ腳做手勢喚醒。雙擊屏幕後,從log看cpu已經被喚醒了,但很快又睡下去,通過log分析,發現沒有進入中斷處理函數。這裏使用的電平中斷。以前已分析過電平/邊沿喚醒cpu流程https://blog.csdn.net/mike

原创 Linux下的workqueue

先看workqueue的創建過程 kernel/workqueue.c /** * alloc_ordered_workqueue - allocate an ordered workqueue * @fmt: printf for

原创 Linux下的eMMC

常見存儲介質 NAND Flash NOR Flash HDD 機械硬盤 SSD 固態硬盤(包含NAND Flash) UFS(包含NAND Flash) eMMC(Embedded Multi Media Card) eMMC接口+NA

原创 Linux下的模擬i2c

內核默認支持模擬i2c,那應該怎麼用呢,參考https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/

原创 Linux下的旋鈕驅動

 先看一次正旋和反旋波形上差異   可以看出兩個波形慢了一個相位,如圖中,判斷正反旋的一種方法如下 綠色信號線下降開始監聽黃色的信號線的狀態,如果是下降沿,判斷爲正旋,如果是上升沿,判斷爲反旋,綠色信號線上升結束一次監聽