2024.02.14 (수)
(rasp) samba에 파일 복사해서 넣기
com5에서 진행
sudo cp /srv/samba/u-boot_ledkey_ksh.bin /boot/firmware/u-boot.bin
sync // 메모리 버퍼에 저장된 내용이 sd카드에 저장 안 될 때가 있음
껐다 켜기
U-boot로 접속
1 #include <common.h>
2 #include <command.h>
3 #include <asm/io.h>
4
5 #define BCM2711_GPIO_GPFSEL0 0xFE200000
6 #define BCM2711_GPIO_GPFSEL1 0xFE200004
7 #define BCM2711_GPIO_GPFSEL2 0xFE200008
8 #define BCM2711_GPIO_GPSET0 0xFE20001C
9 #define BCM2711_GPIO_GPCLR0 0xFE200028
10 #define BCM2711_GPIO_GPLEV0 0xFE200034
11
12 #define GPIO6_9_SIG_OUTPUT 0x09240000
13 #define GPIO10_13_SIG_OUTPUT 0x00000249
14
15 struct cmd_tbl_t;
16 void led_init(void)
17 {
18 unsigned long temp;
19 temp = readl(BCM2711_GPIO_GPFSEL0);
20 temp = temp & 0x0003ffff;
21 // temp = temp & ~0xfffc0000;
22 temp = temp | GPIO6_9_SIG_OUTPUT;
23 writel(temp,BCM2711_GPIO_GPFSEL0);
24 // writel(GPIO6_9_SIG_OUTPUT,BCM2711_GPIO_GPFSEL0);
25
26 temp = readl(BCM2711_GPIO_GPFSEL1); //gpio10~13 read
27 temp = temp & 0x3ffff000; //gpio10~13 clear
28 temp = temp | GPIO10_13_SIG_OUTPUT;//gpio10~13 output
29 writel(temp,BCM2711_GPIO_GPFSEL1); //gpio10~13 write
30 // writel(GPIO10_13_SIG_OUTPUT,BCM2711_GPIO_GPFSEL1);
31 }
32 void led_write(unsigned long led_data)
33 {
34 writel(0x3fc0,BCM2711_GPIO_GPCLR0); //led all off
35 led_data = led_data << 6;
36 writel(led_data,BCM2711_GPIO_GPSET0); //ledX on
37 }
38 void key_init(void)
39 {
40 unsigned long temp;
41 temp = readl(BCM2711_GPIO_GPFSEL1);
42 temp = temp & 0x0003ffff; //gpio16~20 input
43 writel(temp,BCM2711_GPIO_GPFSEL1);
44
45 temp = readl(BCM2711_GPIO_GPFSEL2);
46 temp = temp & 0x3ffff000; //gpio21~23 input
47 writel(temp,BCM2711_GPIO_GPFSEL2);
48 }
49 void key_read(unsigned long * key_data)
50 {
51 *key_data =(readl(BCM2711_GPIO_GPLEV0) >> 16) & 0x000000ff;
52 }
53 static int do_KCCI_LED(struct cmd_tbl *cmdtp,int flag, int argc, char * cons t argv[])
54 {
55 unsigned long led_data;
56 unsigned long key_data;
57 unsigned long key_data_old=0;
58 unsigned long i;
59 if(argc != 2)
60 {
61 cmd_usage(cmdtp);
62 return 1;
63 }
64 printf("*LED TEST START\n");
65 led_init();
66 led_data = simple_strtoul(argv[1],NULL,16);
67 led_write(led_data);
68
69 key_init();
70 do {
71 key_read(&key_data);
72 if(key_data != key_data_old)
73 {
74 if(key_data)
75 {
76 led_write(key_data);
77 puts("0:1:2:3:4:5:6:7\n");
78 for(i=0;i<8;i++)
79 {
80 if(key_data & (0x01 << i))
81 putc('O');
82 else
83 putc('X');
84 if(i !=7 )
85 putc(':');
86 else
87 putc('\n');
88 }
89 putc('\n');
90 key_data_old = key_data;
91 if(key_data == 0x80)
92 break;
93 }
94 }
95 } while(1);
96
97 printf("*LED TEST END(%s : %#04x)\n\n ",argv[0],(unsigned int)key_data);
98 return 0;
99 }
100 U_BOOT_CMD(
101 led,2,0,do_KCCI_LED,
102 "led - kcci LED Test.",
103 "number - Input argument is only one.(led [0x00~0xff])\n");