页次: 1
网上很多这电路,但经过实际验证,俺选取的最终电路如下:
Q2为Pmos管,型号为FDN340P。 用电流表打在VBATT 和 Q2 的3脚之间,进行电流测量。
VBATT接锂电池正极,负极接GND;负载我随手接了个8欧的喇叭(AUX_VCC和GND)。
当没有输入USB电源(V_BUS)+5V,电流表显示指示200ma。
当接入V_BUS时,电流指示0。
工作正常。自动进行了切换。
网上有的电路图在Q2的1脚和2脚接了个二极管(1脚正2脚负),
如图:
我进行了验证,发现接入V_BUS,电流表电流由200ma降到30ma,也就是电池还继续供电关不死。可能和实验的元器件和电压选择有关的原因?
本开贴为使用SPI启动esp8266EX/esp8089(非linux驱动)进行学习笔记, 有时间会持续更新。
尝试运行平台为 rtthread 4.1,其它平台的SPI启动wifi可进行参考,应该是大同小异。
参考网址:
https://github.com/al177/esp8089
https://github.com/wireless-tag-com/esp8089
数据手册:
ESP8266EX.pdf
esp8266EX/esp8089 电路原理图(数据手册内含):
esp8266EX/esp8089 相关引脚:
f1c200s ESP8266 / ESP8089 Function
BCM 13 CHIP_EN esp_reset_gpio
BCM 16 GPIO10 / SDIO_DATA_3 esp_cs0_pin
BCM 19 GPIO7 / SDIO_DATA_0 MISO
BCM 20 GPIO11 / SDIO_CMD MOSI
BCM 21 GPIO6 / SDIO_CLK SCLK
BCM 26 GPIO8 / SDIO_DATA_1 esp_interrupt
3.3V GPIO15 / MTDO boot select
3.3V GPIO0 boot select
GND GPIO2 boot select
下面会以回帖的方式进行更新以下内容
1)运行机制
2)SPI通讯命令/数据
3)实践硬件
esp8266ex(淘宝价格2.5元/片,买了几块,经测试都可正常使用)
全志f1c200s(淘宝价格9.5元(翻新货),买了2块,经验证,xfel可启动内存运行调试)
4)其它:
5)待解决:
找了好久,才发现菠萝派有RTT的声音播放代码,但俺进行测试确卡住了,测试代码:
f1c100s_audio_init();
f1c100s_audio_config(1, 16, 44100);
f1c100s_audio_open(1024);
f1c100s_audio_vol_set(63);
int fd = -1;
int s = 0;
uint8_t *buffer = NULL;
buffer = rt_malloc(1024);
fd = open(argv[1], O_WRONLY);
rt_kprintf("wav play %s\n", argv[1]);
while (1)
{
int length;
/* 从文件系统读取 wav 文件的音频数据 */
length = read(fd, buffer, 1024);
if (length <= 0)
break;
s += length;
audio_pcm_play(buffer, length);
lseek(fd, s, SEEK_SET);
rt_thread_mdelay(6);
}
运行发现卡在了 函数 audio_pcm_play 内部的 while 里:
void audio_pcm_play(unsigned char * dat,int len)
{
int time_out = 100;
unsigned short *buf = (unsigned short *)dat;
// while((!f1c100s_ndma_is_all_complete(AUDIO_DMA_CH))&&(--time_out))
// {
// rt_thread_delay(1);
// }
while(!f1c100s_ndma_is_all_complete(AUDIO_DMA_CH));
memcpy(audio_buf[is_n],buf,len);
f1c100s_ndma_clear_all_complete(AUDIO_DMA_CH);
f1c100s_ndma_disable(AUDIO_DMA_CH);
f1c100s_ndma_config_for_audio(AUDIO_DMA_CH,(unsigned int)audio_buf[is_n],len);
f1c100s_ndma_enable(AUDIO_DMA_CH);
is_n=!is_n;
}
请问这是咋回事呀,后面怎么处理呢?
进行简单修改测试,竟然点亮了。屏幕分辨率240X320
st7789.rar
两个文件放入 rt-thread\drivers 目录
测试代码:applications\main.c
#include "rtthread.h"
#include "drv_clock.h"
#include "board.h"
#include "st7789.h"
uint8_t data[LCD_RAM_SIZE];
int main(int argc, char **argv)
{
rt_kprintf("periph_get_pll_clk:%d\n", periph_get_pll_clk());
rt_kprintf("cpu_get_clk:%d\n", cpu_get_clk());
rt_kprintf("ahb_get_clk:%d\n", ahb_get_clk());
rt_kprintf("apb_get_clk:%d\n", apb_get_clk());
static uint16_t color;
rt_tick_t t1,t2;
color=0;
while(1)
{
color +=0x3333;
for(uint32_t j = 0; j < (uint32_t)Pixel_NUM; j++)
{
data[j * 2] = color >> 8;
data[j * 2 + 1] = color;
}
t1 = rt_tick_get();
lcd_hw_write(0, 0, LCD_Width-1, LCD_Height-1, data, LCD_RAM_SIZE);
t2 = rt_tick_get();
rt_kprintf("tick = %d\r\n", t2-t1);
rt_thread_delay(500);
}
return 0;
}
不知道下面这个怎么操作:
"2 用winhex复制boot.bin到0x2000位置 "
直接用这个命令可以:
dd if=boot.bin of=/dev/sdxx bs=1024 seek=8
其中/dev/sdxx是你的SD卡盘符,可以用 ls /dev/sd* 列出,插上和拔下各运行一次,就知道对应哪个盘。
上电运行结果:
Init OK
SD capacity 31130624 KB
start cp file to ram addr 0x80000000
fonnd fat1 by dbr[dbr 0][fat1 2382]
root 32768 cusize 32 fatsize 15193
find file ok
cu 2 base 32768 offset 0 addr 3
filesize 396624,startform 6 cu
file num of cus 25
file num of secs 775
cp file to ram ok! Run....
\ | /
- RT - Thread Operating System
/ | \ 4.1.0 build Jun 19 2022 18:46:20
2006 - 2022 Copyright by RT-Thread team
lwIP-2.0.3 initialized!
periph_get_pll_clk:600000000
cpu_get_clk:408000000
ahb_get_clk:200000000
apb_get_clk:100000000
msh />[31m[E/MMC] [err]:0x00000100, RTO[0m
[31m[E/MMC] mmc cmd 5 err[0m
[32m[I/SDIO] SD card capacity 31130624 KB.[0m
页次: 1