页次: 1
大佬们,我用xboot上面原有的gt911驱动,发现在触摸时没有拉低INT引脚(Tina上能驱动的是拉低的),猜测应该是启动时序问题。
这个是主线上的启动时序
gpio_set_cfg(rst, rstcfg);
gpio_set_pull(rst, GPIO_PULL_UP);
gpio_set_direction(rst, GPIO_DIRECTION_OUTPUT);
gpio_set_value(rst, 0);
mdelay(10);
gpio_set_pull(gpio, GPIO_PULL_UP);
gpio_set_direction(gpio, GPIO_DIRECTION_OUTPUT);
gpio_set_value(gpio, 1);
udelay(100);
gpio_set_value(rst, 1);
mdelay(5);
触摸时不拉低
换成
gpio_set_cfg(rst, rstcfg);
gpio_set_direction(rst, GPIO_DIRECTION_OUTPUT);
udelay(1);
gpio_set_direction(gpio, GPIO_DIRECTION_OUTPUT);
udelay(1);
gpio_set_value(rst,0);
gpio_set_value(gpio,0);
mdelay(10);
gpio_set_value(gpio,1);
mdelay(1);
gpio_set_value(rst,1);
mdelay(5);
gpio_set_value(gpio, 0);
mdelay(50);
gpio_set_value(gpio, 1);
udelay(150);
gpio_set_cfg(gpio, gpiocfg);
gpio_set_pull(gpio, GPIO_PULL_UP);
gpio_set_direction(gpio, GPIO_DIRECTION_INPUT);
就出现奇怪的时序
第一次尝试移植电容触摸,求大佬们帮忙看看啥问题
@xboot
大佬好,我这边是已经修改了get_boot_device()里面的启动介质,改成了BOOT_DEVICE_SPINAND,但还是没能启动
这是编译的结果
copy from `../output/xboot' [elf32-littlearm] to `../output/xboot.bin' [binary]
Make header information for brom booting
The bootloader head has been fixed, spl size is 32768 bytes.
Ecdsa256 public key:
03cfd18e4a4b40d6529448aa2df8bbb677128258b8fbfc5b9e492fbbba4e84832f
Ecdsa256 private key:
dc57b8a9e0e2b7f8b4c929bd8db2844e53f01f171bbcdf6e628908dbf2b2e6a9
Compressed 4595712 bytes into 2987194 bytes ==> 64.999591%
这个是我在sys-copyself.c里面的自拷贝程序
void test()
{
sys_uart_putc('B');
sys_uart_putc('o');
sys_uart_putc('o');
sys_uart_putc('t');
sys_uart_putc(' ');
sys_uart_putc('t');
sys_uart_putc('o');
sys_uart_putc(' ');
sys_uart_putc('F');
sys_uart_putc('E');
sys_uart_putc('L');
sys_uart_putc(' ');
sys_uart_putc('m');
sys_uart_putc('o');
sys_uart_putc('d');
sys_uart_putc('e');
sys_uart_putc('\r');
sys_uart_putc('\n');
}
void sys_copyself(void)
{
int d = get_boot_device();
test();
if(d == BOOT_DEVICE_SPINOR)
{
struct zdesc_t * z = (struct zdesc_t *)__heap_start;
void * mem = (void *)__image_start;
void * tmp = (void *)z + sizeof(struct zdesc_t);
uint32_t size = __image_end - __image_start;
sys_mmu_init();
sys_spinor_init();
sys_spinor_read(65536, z, sizeof(struct zdesc_t));
sys_spinor_exit();
if((z->magic[0] == 'Z') && (z->magic[1] == 'B') && (z->magic[2] == 'L') && (z->magic[3] == '!'))
{
//if(sys_verify((char *)z->pubkey, (char *)z->sha256, (char *)z->signature))
{
uint32_t csize = (z->csize[0] << 24) | (z->csize[1] << 16) | (z->csize[2] << 8) | (z->csize[3] << 0);
uint32_t dsize = (z->dsize[0] << 24) | (z->dsize[1] << 16) | (z->dsize[2] << 8) | (z->dsize[3] << 0);
sys_spinor_init();
sys_spinor_read(65536 + sizeof(struct zdesc_t), tmp, csize);
sys_spinor_exit();
//if(sys_hash((char *)(&z->majoy), (sizeof(struct zdesc_t) - 100) + csize, (char *)z->sha256))
{
sys_decompress(tmp, csize, mem, dsize);
}
}
}
else
{
sys_spinor_init();
sys_spinor_read(0, mem, size);
sys_spinor_exit();
}
}
else if(d == BOOT_DEVICE_SPINAND)
{
struct zdesc_t * z = (struct zdesc_t *)__heap_start;
void * mem = (void *)__image_start;
void * tmp = (void *)z + sizeof(struct zdesc_t);
uint32_t size = __image_end - __image_start;
#if 0
sys_mmu_init();
sys_spinand_init();
sys_spinand_read(1048576 + 65536, z, sizeof(struct zdesc_t));
sys_spinand_exit();
if((z->magic[0] == 'Z') && (z->magic[1] == 'B') && (z->magic[2] == 'L') && (z->magic[3] == '!'))
{
//if(sys_verify((char *)z->pubkey, (char *)z->sha256, (char *)z->signature))
{
uint32_t csize = (z->csize[0] << 24) | (z->csize[1] << 16) | (z->csize[2] << 8) | (z->csize[3] << 0);
uint32_t dsize = (z->dsize[0] << 24) | (z->dsize[1] << 16) | (z->dsize[2] << 8) | (z->dsize[3] << 0);
sys_spinand_init();
sys_spinand_read(1048576 + 65536 + sizeof(struct zdesc_t), tmp, csize);
sys_spinand_exit();
//if(sys_hash((char *)(&z->majoy), (sizeof(struct zdesc_t) - 100) + csize, (char *)z->sha256))
{
sys_decompress(tmp, csize, mem, dsize);
}
}
}
else
#endif
{
sys_spinand_init();
sys_spinand_read(1048576, mem, size);
sys_spinand_exit();
}
}
else if(d == BOOT_DEVICE_SDCARD)
{
}
}
我在开头加上了一个test打印程序,但是没看到有信息打印,uart使用的是0,我看了下寄存器和sys_uart_putc()的地址是一样的
用xfel在ram里面运行程序是没有问题的,也能检测到spinand
[ 0.161625]Found spi nand flash 'GD5F1GQ4xAYIG' with 128.000MB
[ 0.167369]Found partition:
[ 0.170153] 0x0000000000000000 ~ 0x0000000007ffffff 128.000MB - blk-spinand. 0
[ 0.177361] 0x0000000000000000 ~ 0x00000000005fffff 6.000MB - blk-spinand. 0.xboot
[ 0.185462] 0x0000000000600000 ~ 0x00000000007fffff 2.000MB - blk-spinand. 0.reserve
[ 0.193348] 0x0000000000800000 ~ 0x0000000007ffffff 120.000MB - blk-spinand. 0.private
参考https://whycan.com/t_7323.html中xboot大佬在39楼以后的内容,了解到f133使用的是2kB一个page,
所以我使用sudo xfel spinand splwrite 2048 1048576 output/xboot.bin这条命令,烧写以后已经退出了FEL,但是没有启动LOG。
在sys-copyself.c里面的get_boot_device默认是return BOOT_DEVICE_SPINOR;改成return BOOT_DEVICE_SPINAND;
在sys_copyself的一部分改成
else if(d == BOOT_DEVICE_SPINAND)
{
struct zdesc_t * z = (struct zdesc_t *)__heap_start;
void * mem = (void *)__image_start;
void * tmp = (void *)z + sizeof(struct zdesc_t);
uint32_t size = __image_end - __image_start;
#if 0
sys_mmu_init();
sys_spinand_init();
sys_spinand_read(1048576 + 65536, z, sizeof(struct zdesc_t));
sys_spinand_exit();
if((z->magic[0] == 'Z') && (z->magic[1] == 'B') && (z->magic[2] == 'L') && (z->magic[3] == '!'))
{
//if(sys_verify((char *)z->pubkey, (char *)z->sha256, (char *)z->signature))
{
uint32_t csize = (z->csize[0] << 24) | (z->csize[1] << 16) | (z->csize[2] << 8) | (z->csize[3] << 0);
uint32_t dsize = (z->dsize[0] << 24) | (z->dsize[1] << 16) | (z->dsize[2] << 8) | (z->dsize[3] << 0);
sys_spinand_init();
sys_spinand_read(1048576 + 65536 + sizeof(struct zdesc_t), tmp, csize);
sys_spinand_exit();
//if(sys_hash((char *)(&z->majoy), (sizeof(struct zdesc_t) - 100) + csize, (char *)z->sha256))
{
sys_decompress(tmp, csize, mem, dsize);
}
}
}
else
#endif
{
sys_spinand_init();
sys_spinand_read(1048576, mem, size);
sys_spinand_exit();
}
}
但是没能启动成功,求大佬支支招。
从mach-t113/driver里面复制ts-gt911.c到mach-f1c200s/driver里面,然后修改romdisk里面的设备树,我的板子的触摸INT是PE12(140),RST是PA0(0),
"ts-gt911@0": {
"i2c-bus": "i2c-f1c200s.0",
"slave-address": 20,
"interrupt-gpio": 140,
"interrupt-gpio-config": 6,
"reset-gpio": 0,
"reset-gpio-config": 1
},
添加完以后,烧录启动是GT911 Version: 911(0x1060)(0x00)[ 0.241688]Probe device 'ts-gt911.0' with ts-gt911,
但在window上还是没能使用触摸,求大佬们支支招:o
页次: 1