同樣在 board/st/pdk7105/swUpdate.c 中找到 reset 按鈕相關:
static int check_key_press(void)
{
int count,cur_key,next_key,led;
led=0x00;
count=7;
cur_key=STPIO_GET_PIN(PIO0_BASSADDRESS, 1);
和LED同樣的 #define PIO0_BASSADDRESS 0xFD020000 表示同樣是在 gpiochip0 範圍內,
第二個參數 1 表示用以下指令可以建立相關的資料夾:
# echo "1" > /sys/class/gpio/export
讀取按鈕狀態:
# cat /sys/class/gpio/gpio1/value
1表示沒按(off),0表示按下(On)
不過 /sys/class/gpio/gpio/power/wakeup 沒有任何數值,
表示不能用來從suspend to ram 或 standby 喚醒。
這麼快就解開任務,當然要繼續趁勝追擊,
找出紀錄要 u-boot 用來判斷要使用哪組 bootargs 和 bootcmd。
在前面那個非常大的board/st/pdk7105/swUpdate.c的8636行。
int setenv_start(int partition,unsigned char flag)
{
/* factory mode */
if (flag == EXT_EXT2_USB)
{
被下面函式在8972行呼叫
int update_process(void)
{ ......
flag = ReadSPIFlashDataByChar(IPTV_FLAG_ADDR);
........
setenv_start(partition,flag);
定義同樣在同一個檔案
#define IPTV_FLAG_ADDR 0x90000
然後在下面檔案找到
https://github.com/zheharry/u-boot-sh4-1.3.1_stm23_0045/blob/4f75340902b89827dd232d468e90f8e97b99f083/common/cmd_spi.c
extern unsigned char ReadSPIFlashDataByChar(unsigned int AddressOfFlag)
{
unsigned char CharData;
unsigned char StartAddr[3];
StartAddr[0]=(AddressOfFlag>>16)&0xff;
StartAddr[1]=(AddressOfFlag>>8)&0xff;
StartAddr[2]=AddressOfFlag&0xff;
spi_read(StartAddr, 3, &CharData, 1);
return CharData;
}
到這裡關鍵字 spi(Serial peripheral Interface) 已經出現。之後更底層的在
extern ssize_t spi_read (
結論是儲存在SPI flash,
所以接著直接動眼找板子上的零件,
看到 winbond 25Q80BVSIG 1025 。
一開始以為是 winbond 25080BVSIG 1025,
結果只找到一條對岸的購買消息,
不是只有我會看錯吧。
改正之後找到 spec 寫:
Product Number:W25Q80BVSSIG package type:soic-8 8Mbit
可惜我目前編的Kernel沒有選下面網頁指出的項目:
Device Drivers
Memory Technology Device (MTD) support
Self-contained MTD device drivers --->
<*> Support most SPI Flash chips (AT26DF, M25P, W25X, ...)
不然就可以馬上透過 MTD 來看看數值。接下來的等這週末重編完kernel再繼續。
沒有留言:
張貼留言