您尚未登录。

#2 全志 SOC » F1C100s音频时钟不准啊 » 2025-05-27 05:40:03

Quotation
回复: 3

Audio Codec时钟选择48kHz的话,实际上并不能得到精确的48kHz。
AUDIO_PLL的默认设置,输出24.571MHz。(24000000*86*2/21/8~=24571429)
内部应该是/512分频,得到47991Hz。和48000相差不少啊,误差187.5ppm。
对于音频应用来说,虽然人耳听不出来,但相差了0.3个音分这可是有点大了。
这个问题可以通过打log看时间得到验证。用DMA写音频数据,在DMA中断里打log,时间间隔符合上述计算。

原以为做MP4、唱戏机的F1C100s,在音频方面会比较准确。
不知道有没有解决方法?

#3 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 很好奇,这种 html方块图(不是图片!)是用什么软件做的? » 2024-08-08 21:59:28

图片作者是Shmuel Csaba Otto Traian。这个人很神秘,网上搜不到任何有用信息,只有很多归在他名下的关于Linux架构的图。

#4 Re: 全志 SOC » F1C100s + XBoot写SD卡失败 » 2024-07-13 11:09:14

使用论坛里某位国外网友的裸机代码,能正常读写了。
但是又有个疑问,裸机代码非常之短,怀疑是不是SD卡协议各种情况没有处理完整。

#5 全志 SOC » F1C100s + XBoot写SD卡失败 » 2024-07-13 01:38:42

Quotation
回复: 1

F1C100s,用XBoot读SD卡很正常,写入失败。失败的位置在 mmc_write_blocks里,发完命令后mmc_status返回-1。
有人用过XBoot读写SD卡吗?这个情况可能是哪里的问题?

#6 Re: 工业芯 匠芯创 » 请教,单片机一般如何保存定时采集的数据,要求长期保存,方便查寻历史记录。 » 2024-06-26 01:42:54

不用FS,自己管理写入位置,能做到最少的Flash磨损。
Flash擦除后,分多次写入,一直往后写,不改前面的,写完一个块应该只算写了一次。(记得是这样)
如果断电,重新上电后扫描一遍Flash。要求写入的数据每个块一定不全为0xFF,这样就知道上次写到哪个位置了。

#7 Re: 全志 SOC » 把微凉老哥的vnes移植到linux下了,但是声音炸裂 » 2024-06-18 00:15:20

检查下音频格式,vnes输出的u16格式,和驱动需要的是否一致?

#8 Re: 全志 SOC » F1C100S玩游戏系列-FC红白机Nes模拟器(二)-移植正点原子的nes模拟器(ye781205的汇编核心),带声音,ARM转GNU汇编 » 2024-05-25 04:27:15

感谢楼主踩坑。我在这个基础上移植了,有两个问题不知道楼主有没有遇到过?
1. 背景音乐速度比正常的快、音调高,但画面速度是正确的(和电脑上的模拟器比较过)。APU_SAMPLE_RATE改过的,和驱动里的采样率一样。
2. 屏幕上每16列有一条竖线。

(05.25 update)问题2解决了,竖线是一直没有写入的缓存,即ppu代码里每过16个像素有一个跳过了没写。
找到如下这段代码:

  for(i=sx;i<ex;i++)
  { 
    plcd[i]=NES_Palette[ppu->dummy_buffer[i++]]; 
    plcd[i]=NES_Palette[ppu->dummy_buffer[i++]]; 
    plcd[i]=NES_Palette[ppu->dummy_buffer[i++]]; 
    plcd[i]=NES_Palette[ppu->dummy_buffer[i++]]; 
    plcd[i]=NES_Palette[ppu->dummy_buffer[i++]]; 
    plcd[i]=NES_Palette[ppu->dummy_buffer[i++]]; 
    plcd[i]=NES_Palette[ppu->dummy_buffer[i++]]; 
    plcd[i]=NES_Palette[ppu->dummy_buffer[i++]]; 
    plcd[i]=NES_Palette[ppu->dummy_buffer[i++]]; 
    plcd[i]=NES_Palette[ppu->dummy_buffer[i++]]; 
    plcd[i]=NES_Palette[ppu->dummy_buffer[i++]]; 
    plcd[i]=NES_Palette[ppu->dummy_buffer[i++]]; 
    plcd[i]=NES_Palette[ppu->dummy_buffer[i++]]; 
    plcd[i]=NES_Palette[ppu->dummy_buffer[i++]]; 
    plcd[i]=NES_Palette[ppu->dummy_buffer[i++]]; 
    plcd[i]=NES_Palette[ppu->dummy_buffer[i]];          	
  }

改成这样就好了(可能是编译器优化-O3的原因)

  for(i=sx;i<ex;i++)
  {
    plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
    plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
    plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
    plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
    plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
    plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
    plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
    plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
    plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
    plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
    plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
    plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
    plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
    plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
    plcd[i]=NES_Palette[ppu->dummy_buffer[i]]; i++;
    plcd[i]=NES_Palette[ppu->dummy_buffer[i]];          	
  }
}

#9 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 国内咸鱼淘宝的货的货是如何卖到国外的? » 2024-05-14 21:41:19

咸鱼不知道,淘宝是可以卖到国外的。国外用户下单,地址直接转成集运仓地址,卖家发国内就可以。

#11 DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » FPC金手指厚度0.2mm,需要特殊的插座吗? » 2023-11-28 00:11:11

Quotation
回复: 0

一个器件的金手指厚度是0.2mm,插到普通的FPC插座里感觉有点松动。有没有适用于0.2mm厚度的插座?立创上没搜到。

#12 全志 SOC » F1C100s的HPVCC要怎么接? » 2023-11-24 23:59:48

Quotation
回复: 1

关于HPVCC的电压范围,datasheet上没写。
看到这个地方让我疑惑了,HPVCC不是用来给耳放供电的?

首先F1C600 user manual上,表格4.3.5写着HPVCC是“O”,输出引脚。
其次“F1C200s公版原理图”和“全志C100-MP5原理图”里,HPVCC是没接供电的,只接了10uF电容到地。
然后荔枝派是接到2.8V;彩虹派V3S是接到3.3V。

所以是我一直理解错了?是否应该按全志官方的接法?

#13 Re: 全志 SOC » 继续给F1C100S填坑,PE11管脚导出clkout,给CIF摄像头的提供时钟源 » 2022-12-16 16:56:06

CLKOUT输出的波形质量怎么样?以前用PWM输出给摄像头,波形惨不忍睹,勉强能用。

#14 全志 SOC » start.S是用什么方式开始执行0x80000000附近代码的? » 2022-11-05 12:41:20

Quotation
回复: 2

按照看到的资料,CPU上电,BROM拷贝Flash前面一小段到SRAM,从0开始执行。然后初始化DRAM,把真正的程序拷贝到内存0x80000000,执行。
但是不理解start.S里是用哪一句跳转到执行DRAM中的代码了?
看到start.S里有很多 bl sys_clock_init,bl memcpy,bl boot_main这样的调用。至少前面的应该是在SRAM里,后面boot_main是在DRAM里。不知我理解的对不对?

#15 Re: 司徒开源 » 开源精神值得敬佩,但是你司徒公开po 解FC3000的加密芯片就是可耻,做技术要有底线 » 2022-10-29 17:08:50

从法律上,破解行为(以及黑客行为)没有牟利不代表不违法,破解造成了他人的经济损失是判断标准。

#17 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 土家造-手搓sip芯片 » 2022-09-12 12:24:40

中间这些器件用锡焊确实有风险。封装起来之后,不知道用户会用多高的温度焊。长时间高温焊接,内部的锡融化流走的几率还比较大。

#18 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 土家造-手搓sip芯片 » 2022-09-12 11:10:41

很有意思的想法!Pad板的设计挺有意思啊,很有手搓风格,用简单的low方法模拟封装工艺。这样器件放两面可以缩小占地面积。

#19 Re: 全志 SOC » f1c100s/200s的串口波特率最大是多少? » 2022-06-28 09:50:33

上过2250000,能用。
periph时钟那里默认是25倍频(600MHz),改成27倍频(648MHz),就能准确分出2250000了。但手册上说不要改这个数,可能会影响其他。暂时没看到有什么影响。

#21 Re: 全志 SOC » F1C100s I2C偶然失效,可能是超频导致的吗? » 2022-04-02 22:19:45

出问题的时候,SDA/SCL都卡住不能改变。SCL高电平,SDA不一定高还是低。
把I2C外设断开也不能恢复,主机端卡住了。
用I2C的soft reset寄存器没用;重新assert/deassert I2C时钟、重新初始化I2C也没用。
只有把外设断开、再reset I2C才能恢复。但是两个外设放在一块板子上,目前还没确定是哪个外设的问题。

#22 Re: 全志 SOC » 今天发现新全志芯片XR32F429 » 2022-04-02 22:15:41

诶?debugdump.com不是本站旧域名吗?原来是卖给全志官方用了??

#23 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 嵌入式GUI的规范化 » 2022-03-22 11:34:58

GUI是个软件库/框架,没有什么商业上的必要性让大家统一起来。你说的这些需求是一个GUI框架自己就能做好的,比如Lvgl,提供了硬件层的抽象,也提供了theme、字体等的定制。移植到新硬件上确实不难,自己定制一套theme也不难。

#24 全志 SOC » F1C100s I2C偶然失效,可能是超频导致的吗? » 2022-03-22 11:27:09

Quotation
回复: 3

F1C100s的板子,I2C接了一个触摸芯片和一块OLED屏。开机不一定多长时间后偶然会出现I2C失效,可能几分钟后,也可能很长时间一直没事。失效的时候对触摸芯片的读和对OLED屏的写都会失败了。程序本身没有跑飞。
是超频到720MHz用的,core电压1.2V。
超频可能导致外设失效吗?

#27 Re: Qt/MSVC/MINGW/C++/MFC/GTK+/Delphi/BCB » 分享一个-手工贴片助手-C#开发 » 2021-12-13 08:50:33

赞!手焊时找元器件位号确实是一大痛点,不过现在阻容用立创贴就轻松很多了。

#28 全志 SOC » 被GCC编译参数坑 » 2021-09-14 00:44:57

Quotation
回复: 3

F1C100s,用微凉的裸机USB代码。做了不知道什么操作后,无法识别出USB设备了。
排查啊排查……比较前后的代码改动,没有什么地方能影响USB。
最后发现是GCC编译参数加了-Os导致的问题。具体是哪块代码的问题没有继续深究。
早就知道-Os会采用激进的优化,有可能产生不正确的代码。终于受到了伤害。

#29 Re: 全志 SOC » 正常运行状态下,有没有办法切换到FEL模式? » 2021-09-03 16:59:51

不行诶,早就试过reset SPI、还有恢复SPI相关的一些寄存器,没成功。

#30 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 内电层和多个过孔靠近放的疑问 » 2021-09-02 15:37:08

Quotation
回复: 1

如图,为了过大电流,并排放了4个过孔,过孔截面积相当于4倍了。但内电层几个花焊盘叠加在一起,铜皮连接到过孔的线宽只增加了1/4。
这种情况下一般会怎么放置过孔?

(论坛贴不了图了,提示“url 标签不允许在 img 标签内部使用”)

图片:
Screen%20Shot%202021-09-02%20at%2015.26.23.png
Screen%20Shot%202021-09-02%20at%2015.26.15.png

#31 Re: 全志 SOC » RGB888不使用8位时,低位数据线应该怎么接? » 2021-08-17 08:55:17

理论上说,把低位数据线接到高位,效果相当于增大了一点对比度,亮的更亮、暗的更暗。
接到GND相当于整体变暗一点。
其实应该都是几乎看不出来的。

#33 全志 SOC » 记一天愚蠢的调试 » 2021-06-25 18:32:54

Quotation
回复: 2

F1C100s上写数据到Nand Flash,LittleFS文件系统。保存的数据有很多bit错误。
调试发现和LittleFS层无关,不经过文件系统直接写Flash也会出错。
花了一天时间换不同的数据测试写Flash,情况非常奇怪,写入比较“规律”的数据则很少出错,写入比较“乱”的数据则很多错误。
是坏块的问题吗?不像,因为出错的数目远超过正常的坏块数。
而且写入不同的数据,出错的地方也不一样。每次都是一个bit错误,应当是1的bit变成了0。
…………
…………
在快要下班的时候,换块Flash试试。咦?Flash ID怎么不一样了?
换了Flash竟然完全正常了!!
原来是从代理商那拿了两种样品,两种的型号只差一点点,代理商说用起来是一样的。我照着一个规格书实现了驱动。
但其实两种型号,一个是内置4-bit ECC,一个是需要host自己做8-bit ECC。
我一开始焊的是不带ECC的那种,所以发生好多bit错误。换成内置ECC的就全好了!
…………
愚蠢的一天啊[哭][哭][哭]
以前没做过ECC相关的,不知道Nand Flash内部其实会有这么多错误,非常依赖ECC。

#34 Re: 硬件设计 KiCAD/Protel/DXP/PADS/ORCAD/EAGLE » 这种纽扣接口有专业名称吗? » 2021-05-26 08:43:13

机械强度确实是个问题,SMT强度不太行,还是靠结构固定再焊根线比较好。

#35 Re: 硬件设计 KiCAD/Protel/DXP/PADS/ORCAD/EAGLE » 这种纽扣接口有专业名称吗? » 2021-05-24 14:45:26

这不跟衣服上的子母扣一样。感觉直接买子母扣SMT焊上差不多,就是得手工摆,没法自动贴:D

#37 Re: 全志 SOC » f1c100s的spi0引脚是否可以换成PD那一组? » 2021-05-16 22:00:39

可以用一个IO口接MOS管控制TF卡供电,初始时不给TF卡上电。启动完后Flash就没用了,SPI0改用做SDC1应该没问题。
裸机开发可以做到,UBoot我不了解。

#38 Re: 全志 SOC » F1C100S的Keil裸机USB模拟U盘工程,USB2.0高速模式 » 2021-05-07 13:11:08

多谢分享,正需要U盘代码。不过分享的代码里带了一套GCC有点伤,哈哈

#39 Re: 全志 SOC » [问题已解决,34楼] 自制F1c100s板子,但是不工作,求社区大佬指导一下 » 2021-04-23 08:54:48

层叠功率电感没问题,我用风华的0805功率电感,2.2uH 950mA,妥妥的。

#41 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 有啥低成本 + 简洁的 方法 检测LED灯是否亮了 蜂鸣器是否响了? » 2021-04-09 08:36:18

TB搜光敏电阻传感器模块、光敏电阻传感器模块,找那种带可调电阻、输出数字开关量的,可以设定高于某个亮度值/音量,输出电平改变。

#44 全志 SOC » F1C100s的PA2用作UART1_RX有坑吗? » 2021-03-25 09:13:31

Quotation
回复: 2

经试验,PD4/PD3直接连起来,UART1自发自收可以接收到。
PA3/PA2连起来,线上有信号,但UART1 RX没有收到数据。

而且把PA2当做IO口去读数据,能够读出高低电平变化,就是UART收不到。
这个引脚使用上有什么坑吗?

//补充:
用USB串口线实验了,PA2还是收不到UART数据,PD3可以。
加上拉电阻没用。

#45 Re: 全志 SOC » FC100S 最小系统供电问题的疑问。 » 2021-03-10 20:59:22

我DC-DC用的HX3406,1毛钱。LDO也用了2颗1毛钱的,没什么问题。

#46 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 长按若干秒强制重启的电路怎么做? » 2021-03-10 09:22:47

搜到了ST的Smart Reset IC系列专门干这个事情 https://www.st.com/en/reset-and-supervisor-ics/smart-reset-ics.html,型号为STM65xx/SR1/SR2。有长按1个键的,有同时长按2个键的。长按延时几秒到十几秒后触发reset。
本来以为用几个分立器件能搭起来,但似乎没那么简单。又要长按开机,又要能长按更长时间reset,不太好做。

4楼说的watchdog电路也是要软件里喂狗的,软件如果有bug,比如在死循环里喂狗,那外部watchdog也没办法。
5楼的cat809是电压检测,供电电压低于多少一小段时间再恢复,则触发reset。

#47 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 长按若干秒强制重启的电路怎么做? » 2021-03-09 16:09:47

Quotation
回复: 17

手机或某些电子产品上,常有 长按电源键若干秒强制重启的功能。这种强制重启在系统完全卡死时也管用,所以猜测是硬件实现的。
比如Kindle死机时,按住电源十几秒后,黄灯闪烁并重启。
一般是如何实现呢?有没有低成本的做法?

#48 Re: 全志 SOC » F1c100S 的性能到底如何?怎么看天梯图ARM9只相当于M0的性能 » 2021-03-03 11:33:53

aozima 说:

尽量定点化,实在要用浮点,可以看看 Qfplib 这个库。

这个库看benchmark很厉害啊,但是全是针对M0/M3的汇编,编译不过。

#49 Re: 全志 SOC » F1c100S 的性能到底如何?怎么看天梯图ARM9只相当于M0的性能 » 2021-03-03 09:18:48

没有FPU,浮点是比较慢。如果算法能改成定点数那是不错的,主频设到640MHz能稳定运行。

#50 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 请问这个图片用什么软件画的? » 2021-01-27 23:18:06

流程图嘛,画图软件基本都能画。推荐draw.io,开源的。除了里面那根很随意的曲线,都能画。

#51 Re: 全志 SOC » F1C100s涨价又缺货,有什么推荐的替代? » 2021-01-26 12:58:07

v_8787 说:

现在是什么价格了啊?

快到20了。

#52 Re: 全志 SOC » 跟贴从零构建f1c200s硬件开发板 » 2021-01-26 12:57:10

fastspeet 说:

搞硬件的,要做不应该自己买点芯片打板练习么

这是全新的还是拆机?便宜哇,可否发一下供应商联系方式?

#53 全志 SOC » F1C100s涨价又缺货,有什么推荐的替代? » 2021-01-25 14:37:10

Quotation
回复: 32

F1C100s缺货缺的厉害,价格快涨了一倍了。
好苦逼,手头几个产品全是用的这个,实在是好用。这么便宜又好用的芯片要没了,有什么接近的替代?

#54 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 请问这新出的树莓派单片机版本usb线怎么那么粗? » 2021-01-22 13:36:10

smartcar 说:

双层板控制阻抗,加粗线增大阻抗,或者缩小线间距控制阻抗,树莓派选择了加粗线。

我也注意到了,原来是这个原因。平时自己布个双层板的USB都很随意,不考虑阻抗,也能用。

#56 Re: 全志 SOC » 新作F1C200S,打算百分之百开源,给大家的新年礼物。 » 2021-01-13 23:19:42

bubailong 说:

我这个是调了主频和DDR速度的,如果用默认的,也是没法看的。

DDR参数是如何调整的?

#57 Re: 全志 SOC » 探讨一下全志芯片的音频接口硬件电路连接应该怎么使用最好 » 2021-01-04 09:07:45

david 说:

f1c耳机输出功率多大 能带个小扬声器做音效么?目前我加了个功放 还没调到那里  DAC接的是HPR

依稀记得在哪个地方看到150mW,找不到了。应该只能带动头戴式耳机里那种扬声器,音量很小。

#58 Re: 全志 SOC » 探讨一下全志芯片的音频接口硬件电路连接应该怎么使用最好 » 2021-01-04 09:04:12

微凉VeiLiang 说:
david 说:

另外 你这是上电就璞声还是软件初始化的时候才璞声?如果是软件初始化有璞声,看下200s 1.2版手册第157页的图,有些mixer开关可能要先设置下好平衡直流电压。

初始化后有pop声。感谢提供信息,我去调下看看

音频部分的寄存器里搜“pop”,有和anti-pop有关的,不知道是不是管这个的。

#60 Re: 硬件设计 KiCAD/Protel/DXP/PADS/ORCAD/EAGLE » 三极管集电极开路接负载,有什么好的办法检测负载是否开路? » 2020-10-16 23:58:35

按测电流的方式,给负载串一个很小阻值的电阻,小电阻两端的电压加运放放大后,接AD测量。或者放大到足够大直接用IO口判断电平。

#61 Re: 全志 SOC » F1C100s上电后怎么判断有没有SD卡? » 2020-10-16 09:12:29

根据FLASH_MOSI上的信号来看,当PF1(SDC0_D0)接地时,上电后要1.x秒BROM才开始读SPI Flash。
当PF1接VCC或悬空时并没有问题,上电瞬间开始读Flash。

根据SD卡协议的资料 “……只要卡还在忙,DAT0线就会拉低,并且处于正在编程状态(Programming State)。”
所以推测是BROM根据SDC0_D0低电平判断SD卡正在忙,触发等待/重试,重试1s后放弃SD卡启动,才开始读Flash。

#62 全志 SOC » F1C100s上电后怎么判断有没有SD卡? » 2020-10-10 16:05:20

Quotation
回复: 3

我的板子上不用SD卡,从Flash启动。如果把SDC0相关的某些引脚(PF0-PF5)接上别的做IO口用,系统启动就要多花一两秒。如果完全不接这几个IO口,启动就很快。应该是F1C100s认为接了SD卡,先从SD启动,发现读不出数据再从Flash启动导致变慢。
所以我想问,SDC0的几个IO口要怎么接,才会不被当做接了SD卡?

#63 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 裸机开发必须要自己实现libc和libm吗? » 2020-09-23 22:58:21

不用,可以用gcc的 -lm -lgcc -lc。
不过有可能还是得自己实现少量函数 _sbrk,_exit等。

#64 Re: 全志 SOC » F1C200s 驱动 SPI+RGB 屏的接线问题 » 2020-09-22 12:47:31

三木同子 说:

另外还想请教你一个问题,DB0-DB17怎么知道哪个是分别对应R,G,B?

本站不知道哪个帖子(找不到了)里有份全志A10 LCD的文档,有列出来。

#66 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 怎么实现一个蓝牙HID主机端? » 2020-09-17 17:16:03

liuyuedong 说:

我是参照这个例程写的程序,实际测试的时候,设置长度小于等于64的时候都是正常的,当发送数据长度大于64的时候,只能发送64个字节

SPI_CTL_REG 的 TP_EN,设为0试试。因为SPI是一边发送一边接收的,当RX FIFO满了,会停掉发送数据。所以在DMA的时候可以把这个bit设为0。

#67 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 怎么实现一个蓝牙HID主机端? » 2020-09-17 09:28:05

liuyuedong 说:

问一下f1c100s的SPI DMA的问题啊,spi的DMA发送是不是每次只能发送64个字节??

没有限制,反正是自动的,由SPI FIFO来控制进度。SPI控制器自动一个一个地把FIFO的数据发送出去。FIFO设置trigger level,当FIFO里的数据长度大于或小于这个数时,就发送DRQ,DMA会自动拷贝新数据过来。

#68 DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 怎么实现一个蓝牙HID主机端? » 2020-09-16 13:43:57

Quotation
回复: 7

我想实现一个蓝牙HID的主机端,也就是允许蓝牙键盘连接到我的设备,输入文字。有没有现成的模块方便实现这个功能?
我知道蓝牙HID的设备端有很多现成的模块,简单接在MCU上就可以模拟蓝牙键盘鼠标。但没有找到主机端的模块。

#69 Re: 全志 SOC » F1C200s 驱动 SPI+RGB 屏的接线问题 » 2020-09-10 08:26:02

CS要换一个引脚。理论上只要不片选,SCL和SDA就没影响。

#70 Re: BLDC电机驱动 » 有刷电机可以反转控制减速or停止吗 » 2020-08-21 16:52:18

把电机两根线接到一个大功率小阻值的电阻上,就会迅速消耗能量刹车。
H桥驱动芯片一般有个刹车模式,相当于短接两根线,也会在芯片内部耗掉能量造成刹车。

#73 Re: 全志 SOC » 荔枝派声音问题 » 2020-08-04 13:02:48

Nano带耳放,驱动耳机可以,驱动喇叭应该声音很小。要加功放。

#74 Re: 硬件设计 KiCAD/Protel/DXP/PADS/ORCAD/EAGLE » 请问锂电转 3V3用什么方案比较好? » 2020-08-02 17:25:18

要看电流多大?电流很小用LDO,省事。电流大用DC-DC,根据电流需求再选型。

#75 Re: 全志 SOC » 请教SPI Flash的量产烧录方法 » 2020-07-31 13:52:19

ifree64 说:

请教各位达人,SPI Flash用来存放系统,量产时用什么方案烧录更好呢?
SUNXI-FEL烧录32M,要烧录10多分钟。

哪有这么慢?32Mbit还是byte的flash?

#76 Re: 全志 SOC » 全志 V3S 硬件设计指南[PDF] » 2020-07-17 09:26:54

HY 说:

我的硬件设计,只有速度比较低的时候才可以运行,高了就不行了,怎么回事

速度比较低是指CPU频率还是SPI等的速度?前者可能是供电问题,后者是layout问题。

#77 Re: 全志 SOC » F1C100S GPIO中断延迟比较大 » 2020-07-17 09:25:27

陈卫国 说:

使用Nano的板子测试,发现IO口中断延迟达到60us左右。
测试方法如下:将两个IO口短接,使用定时器产生一定周期的脉冲信号到其中一个IO口,另外一个IO口设置成下降沿中断模式,收到中断将第三个IO口电平翻转,发现第三个IO口的电平翻转比第一个IO口的翻转延迟了差不多60us样子,有人遇到过这个问题吗?

什么系统?裸机直接访问寄存器翻转IO口大约在0.3us。系统对中断的处理、IO口操作都有可能引入延迟。

#78 Re: 硬件设计 KiCAD/Protel/DXP/PADS/ORCAD/EAGLE » 锂电池 电源芯片,你们有没有好用不贵的? » 2020-07-16 09:30:29

Tony 说:

sw6124,充放电管理,路径管理,还有快充协议,电路也不复杂, 功率也够18W。我玩过。

看了一下,这个是给充电宝用的啊,提供的完全是充电宝所需的功能。虽然可能不符合楼主需求,不过学习了。

#79 Re: 全志 SOC » [V3S]发一份V3S的裸机程序 » 2020-07-14 15:58:25

flex-A 说:

另外还想请教各位大佬一个问题:在sys-dram.c中声明了一个结构体变量,在声明的同时赋值,但是这样cpu就不知道跑哪去了,改成下面这样就好了
https://whycan.cn/files/members/1924/03.png
但page_size放外面赋值总觉得有点刺挠:),想问问各位大佬有啥解决办法吗。

把几个变量赋值顺序调成和结构体声明里的一样试试?

#80 Re: Php/Nodejs/Web/HTML5/Javascript/微信开发/Python » Python 发布应用程序, 将脚本转化为可执行程序 » 2020-07-05 01:34:29

ma6254 说:

我写的上位机,也用了这个打包器,图形库是ptqt5,其中有部分交互是用H5做的用到了webengineview
最后打包出来的整个文件有200多M,看了下py5core有20M,webengine有90M,不知道该怎么缩小体积

这大概只能换UI库了,没有复杂UI的话用Python自带的Tkinter就很小。

#81 Re: 全志 SOC » 有需要audio技术支持的吗? » 2020-06-29 11:57:55

akinggw 说:

有没有f1c100s的音频裸机驱动啊?淘宝有个卖的,有点贵呀

可参考xboot的audio改改,加上DMA就比较实用了。主线程解码音频,DMA往DAC传输数据,不难。

#82 Re: 全志 SOC » 能裸机调用GPU吗? » 2020-06-24 14:34:03

Blueskull 说:

几乎不可能。shader要编译的,编译器一般是jit的,驱动里面实现的。一般gpu的驱动超级复杂,是一个完整的编译器+优化器,而且还得负责分配gpu资源。

多谢!

#83 全志 SOC » 能裸机调用GPU吗? » 2020-06-24 12:00:13

Quotation
回复: 12

带GPU的SoC,我希望用GPU的shader加速运算,但并不用真正的3D功能。
如果为这个需求就装Linux和OpenGL太重了,有没有可能裸机调用到GPU的部分功能?
系统和GPU通信也是通过寄存器吗?是否能选择性地只使用小部分功能,还是必须开发一套复杂的driver才能用起来?

#84 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 有用过3轴磁传感器吗? » 2020-06-23 16:30:19

用280°热风枪又焊了一片,发现一个重要线索:板子单独测试,3个轴数据是好的。装到产品里去,y轴数据范围又变了。
所以这只是典型的磁传感器的hard iron干扰。y轴正对着喇叭,只是我没想到10cm外的小喇叭有这么大干扰。
收集各个方向旋转的数据,对中点偏移做校准后,数据看起来正常多了。

#85 DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 有用过3轴磁传感器吗? » 2020-06-23 12:13:04

Quotation
回复: 2

有没有遇到过1个轴数据不对的情况?
焊了2片,都有一个轴的数据范围是不对的,比其他两个轴范围小很多,数据也很不稳定。
怀疑是焊接烫坏的。WLCSP封装,只能用热风枪吹。焊接有什么注意事项吗?

#86 Re: 全志 SOC » F1C100s看门狗失效bug » 2020-06-16 10:06:54

myxiaonia 说:

0xdba00000 ~ 0xffff4040,将这个虚地址段用mmu映射到sdram区,这个总可以完成的吧!这样cpu不会司机了,因为实地址是真实可用地址啊

多谢,简单测试了一下,这个方法是可以解决问题的。现在我是把从0xd0000000到0xffffffff的地址映射到0x90000000。
只测试了一些地址,也不敢保证所有的地址都没问题。毕竟不知道该bug产生的原理。不过确实是暂时解决了。

#87 全志 SOC » F1C100s能用并行Flash吗? » 2020-06-10 16:27:40

Quotation
回复: 2

像这种并行Flash,能支持吗?或者说这种Flash有没有只需要很少引脚的接法,就像SD卡也可以用SPI访问一样。
Screen%20Shot%202020-06-10%20at%2016_25_20.png

#88 Re: 全志 SOC » 迪卡电子的F1C200S PDA正在焊接 » 2020-06-05 23:41:07

本来想说板子好大,然后发现是电脑好小。这是什么电脑?

#89 Re: ST/STM8/STM8S/STM8L » STM8L152C8这个芯片的ADC1,现在遇到的问题是第一次读取的AD转换值是不对的,希望有前辈可以指导一下 » 2020-05-27 13:03:51

找找官方文档,STM8不知道,STM32的ADC上电后要等待校准

       //Enable ADC reset calibration register
        ADC_ResetCalibration(adc);
        //Check the end of ADC reset calibration register
        while (ADC_GetResetCalibrationStatus(adc)) {}
        //Start ADC calibration
        ADC_StartCalibration(adc);
        //Check the end of ADC calibration
        while (ADC_GetCalibrationStatus(adc)) {}

#91 Re: 全志 SOC » F1C100s看门狗失效bug » 2020-05-24 21:42:53

staunchheart 说:

这两天临时出去有事了,所以没能按时试。
经测试RTT用GCC编译,没有这样的问题。WDT正确的工作了。

    rt_kprintf("start wdg test----------------------------------\n");
    struct  A* a = (struct A*)malloc(sizeof(struct A));
    // ...
    free(a);
    // a被释放,指向的地址重新分配后写入了其他内容
    // ...
    a->func();  // 野指针使用,危险!
    rt_kprintf("end wdg test----------------------------------\n");

我那个只是示意代码。是要向那块被释放的地址里写入合适的数据,使a->func的值为0xdba00000 ~ 0xffff4040。

#92 Re: 全志 SOC » F1C100S裸机 Timer USB HOST » 2020-05-23 11:14:39

XBoot里的timer可以用,在src/include/time/timer.h。使用方法参考src/driver/clocksource/clocksource.c。

#93 Re: 全志 SOC » F1C100s看门狗失效bug » 2020-05-22 10:21:12

继续研究。C++对象内存布局虽然没有固定标准,是编译器实现的,但基本是按照《深度探索C++对象模型》的样子。
一个带有虚函数的类的指针,指向的内存区域最开头应该是类的虚函数表指针。该指针指向一个数组,数组成员是函数指针。

在上面的例子中,当调用p->g();时,由于p指向的内存区域全是0,所以被当做是地址0x0处开始为虚函数表。
g()是类的第二个虚函数,所以把地址0x4当做函数指针。
打印出地址0x0附近的内存看:

0: 0xea00000d
1: 0xe59ff014
2: 0xe59ff014
3: 0xe59ff014
4: 0xe59ff014
5: 0xe59ff014
6: 0xe59ff014
7: 0xe59ff014
8: 0x80000260

看到0x4地址处的内容是0xe59ff014,接下来会把0xe59ff014当做函数地址去调用。就是经过这个非法函数调用后,看门狗失效并且死机!
复现此bug的代码可以再精简为:

    typedef void (*FuncPtr)();
    FuncPtr f = (FuncPtr)0xe59ff014;
    f();  // 触发看门狗bug

继续做实验发现,并不是只有这一个特殊的地址调用会触发bug,实际上有很大范围的地址都能引起看门狗无效。
从 0xdba00000 ~ 0xffff4040,这个区域内的地址,如果赋值给函数指针来调用,都会引发看门狗失效bug!!小于0xdba00000或大于0xffff4040的地址调用,则能正常死机并触发看门狗。(具体地址会变化,还跟CPU频率有关,不是完全精确的范围。)
这个范围是很大的,也就是说如果程序写错了,还是会有挺大的可能性遇到此bug。

比如考虑下面这个常见的野指针访问代码,触发看门狗bug的概率并不小。

struct A
{
    int data;
    void (*func)();
};

A* a = (A*)malloc(sizeof(A));
// ...
free(a);
// a被释放,指向的地址重新分配后写入了其他内容
// ...
a->func();  // 野指针使用,危险!

#94 全志 SOC » F1C100s看门狗失效bug » 2020-05-21 22:30:29

Quotation
回复: 14

刚调了好几个小时的灵异bug,现象是启动后有时候会死机。这时候已经启动了看门狗,但狗没有起作用,系统一直卡在那不reset。
最后调出来是个空指针错误。空指针毕竟是编程比较常见的错误,空指针能导致看门狗无效,F1C100s的这个bug也是有点严重。

一番精简之后,找到了最小复现代码:
只要用一个基类指针,指向一块内容为0的区域,调用基类的第二个虚函数,就很容易使看门狗失效并死机。

这个bug可能跟编译器的具体实现(C++类对象内存布局)有关,我用的GCC,其他编译器不一定是这样。

class Base
{
public:
    virtual void f() = 0;
    virtual void g() = 0;
};


// main():
    // 设置看门狗,5s的时长

    uint8_t empty[1024];
    memset(empty, 0, sizeof(empty));
    Base* p = (Base*)&empty;  // 野指针,指向了一块内容全为0的内存

    feedWatchdog();  // 喂狗
    mdelay(10);  // 等待超过1500ms则不出bug,等待0ms也不出bug,这之间都会遇到bug

    p->g();  // 调用基类的第二个虚函数(第一个没问题),从这里就死机了。看门狗无效。

#95 Re: 全志 SOC » F1C100S程序烧写问题 » 2020-05-20 17:09:20

ly123 说:

也就是说要更新程序必须用到【RESET】 +【FLASH-CS】了?有没有其它方法使升级程序时不必用到这两个按键?比如通过修改boot之类的?

自己在程序里写代码更新Flash就可以。比如接收从串口或USB来的指令,收到特定的指令则把后面的内容写入Flash。
这种方法不是用sunxi-fel等现成的工具,相当于自定义了一个刷机的通讯协议。

#96 Re: Cortex M0/M3/M4/M7 » STM32F103C8T6 跑了几个星期后突然死机,有什么好的调试方法吗? » 2020-05-17 16:11:25

如果是3.5个星期,可能是哪里的int32毫秒溢出了,7个星期则为uint32毫秒溢出。

#99 Re: 全志 SOC » 各位大佬,f1c100s和ea3036手工焊接有什么方法技巧吗? » 2020-05-12 11:06:21

底部中心有大焊盘的比较不好焊,要吹得时间长些。
周围一圈引脚,我经常是先上上锡,再用热风枪吹,和焊盘的锡就容易结合得好了。

#100 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 自从开始用JLC SMT,多了个习惯 » 2020-05-09 21:10:22

现在还是只能打样,最多50片。限制还蛮多的,只能贴单面。也就产品研发阶段用用,省自己焊的时间。

#102 Re: 全志 SOC » 自制F1C100S核心板 (开源PCB) » 2020-05-05 00:30:44

DC-DC的外围器件不要追求那么整齐,按datasheet上的layout guideline的思路摆。

#103 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 强磁场对信号有没有干扰? » 2020-04-30 08:55:02

xxzouzhichao 说:

磁通的微分就是电压,你说会不会有干扰?

所以,变化的磁场会影响电,不变的磁场没事?

#104 DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 强磁场对信号有没有干扰? » 2020-04-29 23:36:13

Quotation
回复: 9

产品里有一处需要用到磁铁。磁铁旁边几mm处是显示屏的FPC排线,上面走几十MHz的SPI信号。
请问磁铁会不会干扰SPI信号?
如果有,有什么屏蔽的方法?
一般的铜箔胶带是不是只能屏蔽电磁,对纯磁场无效?

#105 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 不论什么烙铁头只要碰一下塑料就挂了,哪怕是买立创的维修佬13元一个都这样, 真是*了狗 » 2020-04-28 14:25:50

你们都不用高温海绵吗?我跟贴片厂老师傅学的手法:每次焊完东西,烙铁要放回架子上之前,在湿海绵上蹭几下,把烙铁沾锡的面都蹭净;上满锡(关键步骤),再放回架子上。不忙关电源,多放一会。很久不用了再关电。

#106 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 不论什么烙铁头只要碰一下塑料就挂了,哪怕是买立创的维修佬13元一个都这样, 真是*了狗 » 2020-04-27 22:16:16

raspberryman 说:

碰到塑料挂烙铁头是什么化学原理?

具体不知道。烙铁头表面有用的关键是一层电镀,塑料加热碳化可能把电镀层破坏了,就不沾锡了。

#108 Re: 全志 SOC » 商业使用F1C003芯片大概需要多少钱? » 2020-04-27 16:23:38

迪卡 说:

全新9元
拆机5块钱一片(良率50%以下)

我们买的就算不含税也没这么便宜啊?来,把这个代理商的联系方式甩我脸上。

#109 Re: 全志 SOC » 调通F1C100s的SPI DMA » 2020-04-26 17:29:19

ntmusic 说:

水一贴,DMA结合操作系统才能比较好发挥优势,在等待DMA传输结束时CPU可以很方便的切换出去做别的事情,而裸机则一般要通过设置状态结合中断来使用,程序结构也会变得奇奇怪怪,若使用查询等待的话可能还不如直接使用CPU操作来的快,因为CPU一般拥有总线最高优先权

确实,有OS抽象出线程或task的概念会方便使用。不过如果代码写得巧,裸奔也清爽的:D。
比如把中断封装成回调,用C++的lambda写回调实在很方便。

#110 Re: 全志 SOC » 调通F1C100s的SPI DMA » 2020-04-26 17:24:38

泡在妞里的Feel 说:

求赐教,这两个寄存器是什么功能?
https://whycan.cn/files/members/1964/test.png

Wait State意思不知道。

Burst Length大约是每次传输数据,在总线上连续传几个“Data Width”那么大的数据。
对于从内存到内存,Burst Length设为4直接就可以用。
对于从内存到外设或外设到内存的DMA,如果Burst Length设为4,外设的FIFO一般有trigger level也要对应改。比如trigger level默认为1,表示FIFO里只要有1个数据就发送DRQ,让DMA来拷走。当Burst Length为4,trigger level也要>=4。
反过来,如果是从内存到外设拷数据的,FIFO的trigger level需要 <= (FIFO总长度 - 4)。

#111 Re: 全志 SOC » 调通F1C100s的SPI DMA » 2020-04-26 17:16:52

泡在妞里的Feel 说:

666,DMA部分的代码可否分享一下。

现在还有点玄学问题没有解决,以后解决了再分享……
代码里有时候多一行少一行无关代码,显示屏就花屏了。可能是时序的问题,也可能是字节对齐的问题,还没弄明白。

另外,我是很想分享代码,但是代码混在项目里,要分享出来还得抠,抠出来又不能直接跑。
要是全志有一套像STM32那样的标准库,分享资料会更方便。

#112 Re: 全志 SOC » 调通F1C100s的SPI DMA » 2020-04-26 17:09:13

Quotation 说:

另外,发现DDMA拷贝较大的数据会出错,比如拷贝1MB数据,第一次成功,第二次就从1020KB开始数据不正确了。可能是缓存的原因,待研究。

这个问题是简单的cache问题,从另一个帖子里@armstrong 的回复明白了。正确invalidate和clean缓存后就没有传输错误了。DDMA一次可以传16M,NDMA一次可以256KB(文档上说是128KB)。

#113 Re: 全志 SOC » 关于F1C100s的DMA使用 » 2020-04-25 13:30:16

armstrong 说:

cpu把数据写到内存,然后交给外设或dma,要用clean;
cpu读取由外设或dma放在ram的数据之前,要invalid;
dcacheinvalid和dcacheclean指令,要么是针对mva的,要么是针对cache-line的,要么就整个dcache
所以MMU_InvalidateDCacheArray函数封装了mva的遍历。
对ram变量也有cache-line对齐的要求,即变量或数组的大小和地址必须32字节对齐,否则会破坏变量。

看了这几个cache相关函数的实现,有个疑问。函数里需要遍历整块内存,以32字节为单位去调用 MCR p15……。这样岂不是很低效?
如果我有几百K的数据从外设读回来,实际上CPU cache只有一点点,并不需要遍历几百K去invalidate cache。
那怎样能够仅仅invalidate需要的cache呢?当然可以invalidate整个cache,还有没有更精简的方法呢?

void MMU_InvalidateDCacheArray(unsigned long mva, unsigned long num)
{
  signed long size = num;
  while (size > 0) {
    MMU_InvalidateDCacheMVA(mva);
    mva += CACHE_ALIGN;
    size -= CACHE_ALIGN;
  }
}

#115 全志 SOC » 调通F1C100s的SPI DMA » 2020-04-25 00:28:20

Quotation
回复: 25

1. 初步调通SPI DMA,成果喜人。
SPI Tx和Rx都用上DMA,接示波器看CLK信号。当通过寄存器设置SPI速率设为100MHz的时候,CLK信号实际能跑到96MHz。SPI速率设为50MHz的时候,实际CLK为49.xMHz。
(用XBoot不管怎么设速率,实际的只能到25MHz。一方面是没用DMA,一方面是XBoot的代码不够优化。)

2. 实验用DMA加持的SPI驱动ST7789串口屏。240x240分辨率、RGB565,SPI跑满50MHz,屏幕帧率可以到54。非常满意了。
实验时是用杜邦线接的屏,也许走线好一点的话还能支持更高速率。我现在是只能跑到50MHz了,多1M显示就开始乱了。

3. 实验DMA做内存拷贝,结果如下。DMA拷贝内存,速度并没比memcpy快多少。
有几个参数能影响DMA拷贝速度:1) DMA的种类,用NDMA还是DDMA;2) data width 3) burst length。
而memcpy速度受CPU主频影响(一点点)。

拷贝128KB数据比较:
memcpy 2.4ms(640MHz主频)
DDMA 1.9ms(data width = 32-bit,burst length = 4)
NDMA 2.6ms(data width = 32-bit,burst length = 4)
DDMA拷贝内存最快能到memcpy的1.25倍。

另外,发现DDMA拷贝较大的数据会出错,比如拷贝1MB数据,第一次成功,第二次就从1020KB开始数据不正确了。可能是缓存的原因,待研究。

#116 Re: 全志 SOC » 分享自制的使用USB网卡的F1C200S开发板 » 2020-04-20 23:04:45

wwng 说:

我是3.3v是DC-DC,2.5和1.2v是LDO。用示波器测量发现LDO输出会比DC-DC慢。可能我的LDO型号有问题?

我LDO是6219,EN脚直接接3.3V,VIN放了1uF的电容。可能跟LDO型号有关。

#117 Re: 全志 SOC » 谁有V3S或者F1C100s的DMA例程? » 2020-04-20 22:56:12

@达克罗德 楼主,有没有调通SPI的DMA?(顺便问晕哥,回复帖子能不能强提醒某人?)

#118 Re: 全志 SOC » 分享自制的使用USB网卡的F1C200S开发板 » 2020-04-20 22:52:40

“3.3v给3路LDO供电,但是这样会导致电源的时序不对”,还有这样的事?我一直是DC-DC输出3.3V,给两个LDO和另一个DC-DC供电,从来没出过问题。
2.8V和2.5V是LDO,1.1V是DC-DC。

#119 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » PCB台历 » 2020-04-18 23:53:29

白框一个月才动一次,就不用弄这么复杂了吧。顶多装几个红外收发测距,检测到框框现在的位置,每月1号检查一下,位置不对就在墨水屏上提示用户手动调整位置。
或者更简单一点,框框下边贴一条磁性胶带,用几个霍尔开关识别位置。

#120 Re: 全志 SOC » 谁有V3S或者F1C100s的DMA例程? » 2020-04-17 17:27:47

达克罗德 说:

当前xboot似乎没有DMA的驱动,我想看看能否把SPI的读写以及memcpy用DMA来加速

楼主有没有调出来SPI的DMA?
发现用XBoot的DMA约有40%的时间在空闲,想用DMA加速。XBoot里设置成50M SPI,波形看CLK确实是50M,但算上空闲的部分就只有29.xMHz了。

#121 Re: 全志 SOC » 开源自己画的一个F1C100S板子和原理图,摄像头和屏幕同时引出,所有io引出 » 2020-04-16 09:35:50

kerr 说:

大神, 请教下, 您的原理图中JP3是什么?
CSI接口 需要两个ME6206?  我看两个VCC2.8都用到

JP3是切换摄像头DVDD的供电,不同摄像头要求的不同。有的用2.8V,就去掉U7,接上JP3。有的不是2.8V的摄像头,则自己换成合适的LDO到U7,打开JP3。

#122 Re: 全志 SOC » 求大佬帮我看一下自制F1C200S小板子 » 2020-04-15 10:25:12

看不出明显的错误,建议打样做下去吧,有了问题在调试中学习。也不能什么都指着网友帮忙检查嘛是不是。

#124 Re: 君正Ingenic/X1000/X2000/T10/T20/T30 » 求便宜好用的电平转换芯片 » 2020-04-14 14:36:54

74ALVC164245,1.x元。
没用过,只是现搜的。去立创商城,搜电平转换,按引脚数过滤,48pin的一般是16通道。

#125 DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 自从开始用JLC SMT,多了个习惯 » 2020-04-13 16:23:45

Quotation
回复: 15

JLC SMT只能贴单面,所以现在画板,习惯把阻容尽量放在一面,全让JLC贴。省不少事。
尽管有时阻容放一面不方便布线,也要勉强这样做,否则好像错过了羊毛。哈哈。

#127 Re: 全志 SOC » F1C100S U盘速度 » 2020-04-01 09:42:36

按理说应该不难,参考STM32的USB Host库应该比较容易实现。

#128 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 这个规格的FPC金手指用什么插座? » 2020-04-01 09:32:16

非常感谢!这个可以的。
太少见了。而且偶数p的座子还区分上接和下接,上/下接对应的FPC不能通用。

#129 Re: 全志 SOC » EA3036芯片老烧大家帮我分析下。。 » 2020-03-31 10:50:28

杨飞武 说:

是这个问题。跳了一个大坑。

DC-DC的输入电容会影响这么大?5V是用什么供的?

#130 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 这个规格的FPC金手指用什么插座? » 2020-03-31 10:47:42

wujique 说:

就是FPC座子,0.3 间距基本都这样,前插后翻

死活搜不到合适的,找到的0.3mm的一般至少13p往上,而且都是奇数的。这个8p的太奇葩了点。

#131 DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 这个规格的FPC金手指用什么插座? » 2020-03-30 16:59:18

Quotation
回复: 4

这个气压传感器的金手指是这种样子的,看pitch大约是0.3mm,而且临近的两pin是一前一后的。
想问下这个该用什么插座?

Screen%20Shot%202020-03-30%20at%2016_54_36.png

#132 Re: 全志 SOC » 全志F1C200S原理图+PCB(公版) » 2020-03-27 13:36:51

Gentlepig 说:

板子挺大,还是四层板。
不明白串口那里是用了个Mos管来控制接收,是为了匹配电压?

感觉是Push pull转成Open drain,防止外部拉/灌电流。

#133 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 点菜宝上面,这个固定FPC接插件的东东叫啥? » 2020-03-27 13:10:01

带背胶的泡棉垫片吧,粘在接插件翻盖上,泡棉上面应该顶住外壳,压住翻盖。

#134 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » Q群看到的一个创意 DIY » 2020-03-26 09:38:49

v_8787 说:

灯条没看到几根线,驱动这么多等是怎么实现的?

用的像WS2812这种带IC的灯,串行信号控制。

#136 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 请问立创商城 LC凭什么卖这么贵? » 2020-03-21 13:35:44

smartcar 说:

https://s.taobao.com/search?q=HY951180A

https://item.szlcsc.com/35646.html


都是 HY951180A, 淘宝卖4块, LC卖13.5块?

其实LC上要看批量价格8.58多含税,淘宝是仿品+不含税,差的就没那么大了。

#139 Re: Cortex M0/M3/M4/M7 » STM32F4库函数中几种FFT实现方式对比 » 2020-03-17 10:27:23

JenniferL 说:

感谢关注与回复,所以说可以只用一半的数据么。

如果输入是实数(比如声音),那是只用一半的输出就可以。

#140 Re: 全志 SOC » 网上看到的F1C200s最新资料,包括Datasheet(V1.1)和User Manual(V1.2) » 2020-03-15 01:33:53

metro 说:

我也对这点感到好奇,毕竟打开某宝也找不到这个价格的F1C200s。
顺带一提,我翻了一下博客,发现博主就是之前搞信用卡上跑Linux的老哥:My Business Card Runs Linux。在这个帖子里面写了F1C100s是$1.42。

原来是这位。帖子里说,是全志主动联系他,白给了些F1C200s样品。

#141 Re: 全志 SOC » F1C100S裸奔framebuffer+PWM+GPIO驱动 » 2020-03-15 01:31:09

1017078605@qq.com 说:

root@yu-virtual-machine:/home/yu/lichee/lvgl_f1c100s# make
arm-eabi-objcopy -v -O binary build/firmware.elf build/firmware.bin
copy from `build/firmware.elf' [elf32-littlearm] to `build/firmware.bin' [binary]
Make header information for brom booting
tools/mksunxi/mksunxi: 1: tools/mksunxi/mksunxi: Syntax error: ")" unexpected
Makefile:140: recipe for target 'build/firmware.bin' failed
make: *** [build/firmware.bin] Error 2

各位大佬, 我用这个编译gcc-linaro-5.3.1-2016.05-i686_arm-eabi.tar
出现了以上的错误,请教下是什么问题?

makefile贴一下,多写了个括号吧?

#143 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 求一款16路以上的触摸按键芯片推荐 » 2020-03-12 16:57:35

MPR121,12路,I2C地址有4种。所以用一个I2C口接4片共48路。
还有TS20,20路。I2C地址有2种,所以最多40路。

#145 Re: 8051/STC8/AT89C51/N76E003 » 请问大家N76E003单片机一个串口要接 10个 SIM800C模块读写短信, 用什么方案好呢?模拟开关可以实现吗? » 2020-03-12 10:35:12

74HC4052,双路4通道多路复用,1片可以接4个串口的TX/RX。
所以你想接10片要用级联,1片74HC4052接单片机,下面接3片74HC4052。
但我没用过级联,不知道串起来电阻会不会太大。

#147 Re: 全志 SOC » 最近用了V3S的芯片画的一个主控板 就是总提示Allwinner USB FEL device not Fount » 2020-03-11 11:46:50

USB不插这个板子,lsusb一下,和插上板子的比较,是不是多了CP210x这行?如果是,那就是lilo说的问题。

#149 Re: Cortex M0/M3/M4/M7 » STM32F4库函数中几种FFT实现方式对比 » 2020-03-09 12:36:53

回答问题2,对于实数输入,输出的FFT结果是共轭的。所以,对实数输入,常用rfft优化,可以减少运算量。见arm_rfft_*函数。

#150 Re: 全志 SOC » UNIQUE_ID CPU型号F1C100 » 2020-03-06 23:55:43

F1C100s没有。可以用Flash芯片的Unique ID。

#151 Re: 全志 SOC » 【这是一个看完你会回复握草的帖子】 开源项目,Linux名片,使用全志f1c100s » 2020-02-22 15:59:19

1066950103 说:

这电路图 少了一路3.0v的电源 和一些 tv 之类的电容 感觉简单好多啊!不错借鉴原理图。

AVCC和VCC_DRAM允许的电压范围有重叠,但这两个共用一路供电可能不是好主意。DRAM会使纹波比较大,而AVCC需要稳定。
不过如果电路里用不着音频等模拟部分,也无所谓了。

其实我试过TV_VCC和HPVCC都不连也没关系,其他功能能正常用。

#152 Re: Qt/MSVC/MINGW/C++/MFC/GTK+/Delphi/BCB » 请问Qt如何判断一个点是否在多边形内部呢? » 2020-02-21 23:24:06

超级萌新 说:

请问这个算法是什么原理?

Qt里有两种算法。比较好理解的一种经典算法是,过该点画一条穿过多边形的直线,数一数和几条边相交。为奇数则点在多边形内。

#155 Re: 全志 SOC » F1C100S 为什么要这么多路电压 » 2020-02-16 17:09:13

成本敏感的话,我一般是3.3V和1.1V用DC-DC,2.8V和2.5V用LDO,这样也简单些也便宜。

#156 Re: 全志 SOC » 跟风画了个F1C200S的小板 【开源PCB】 » 2020-02-12 16:28:55

这个BOM真好,很适合手焊。手焊一堆阻容的时候,一次拿出若干个同样的,点一下BOM列表,照着右边的高亮去找就行。

#157 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 最近一个很火的过时技术WebUSB » 2020-02-09 21:58:50

这个可以,理论上用libusb写的功能都可以实现,所以完全可以把sunxi-fel用网页重写一遍。
WebUSB是Google推的,还没成为正式标准,所以只有Chrome支持。标准和API见 https://github.com/WICG/webusb

#158 Re: 全志 SOC » 全志F1C100S 做了块小板子 » 2020-02-04 17:53:01

TF卡盖住的地方还可以放东西,这个操作可以,省面积了。只是不知道有没有干扰。

#159 Re: 全志 SOC » 全志F1C100S 做了块小板子 » 2020-02-04 17:49:08

Aysi 说:

TF卡隔壁圆的是喇叭?一直想找这种喇叭, 请问喇叭型号是什么?

五向开关。
所以你是想找贴片的喇叭?这种贴片蜂鸣器可以当音质很差的喇叭用 https://item.szlcsc.com/96500.html

#160 Re: 全志 SOC » 自己做的板子 Flash 无法识别的问题 » 2020-01-25 00:31:51

SPI Nand和SPI Nor Flash的命令看起来并没有大差别,要修改sunxi-fel应该也不难支持上。

#161 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 这种小孩的玩具可以自发电吗? » 2020-01-22 19:55:11

这是装纽扣电池,转起来会亮的玩具吗?
叫什么?我们小时候是用大纽扣做的,两只手一拉一拉旋转。

#162 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 刚刚翻京东方 bp101wx1-206 的手册, 发现有一个 CABC_EN 引脚, 搜了一下,这个神奇的功能 » 2020-01-13 19:23:53

jimmy 说:

是在屏幕里面嵌入一个芯片, 专门计算当前帧的亮度, 然后再调整亮度吗?

LCD本来就需要驱动芯片,这就是驱动芯片的高级功能。实时计算画面内容的亮度,如果整体亮度都暗,就把RGB值整体调大(浅),把背光调暗。

#164 Re: Php/Nodejs/Web/HTML5/Javascript/微信开发/Python » 为什么 163.com 和 qq.com 的官网字符编码都改成了 gbk/gb2312 了呢? » 2020-01-03 15:56:45

刚改的吗,还是一直是这样?如果一直这样,可能是为了兼容国内的老旧浏览器。

#165 Re: 全志 SOC » 烧写usb报错 » 2020-01-02 23:51:23

CS引脚加个上拉试试?把CS引脚用10K电阻接到3.3V。
看了几种开发板,CS都是有上拉的。

#166 Re: 全志 SOC » 烧写usb报错 » 2020-01-02 12:47:58

cris8259 说:

root@hj-virtual-machine:/home/hj# sunxi-fel ver
AWUSBFEX soc=00001663(F1C100s) 00000001 ver=0001 44 08 scratchpad=00007e00 00000000 00000000
root@hj-virtual-machine:/home/hj# sudo sunxi-fel -p read  0x20000000  10240  read.dat
root@hj-virtual-machine:/home/hj# sunxi-fel ver
AWUSBFEX soc=00001663(F1C100s) 00000001 ver=0001 44 08 scratchpad=00007e00 00000000 00000000
root@hj-virtual-machine:/home/hj#

如果read内存10kB可以,spiflash-read不行,那可能还不是USB的问题。
sunxi-fel spiflash-info 试试。如果涉及flash的都出错,那把flash部分的原理图贴一下看看?

#168 Re: 全志 SOC » 烧写usb报错 » 2019-12-31 15:05:08

cris8259 说:

读写都不行
root@hj-virtual-machine:/home/hj# sunxi-fel ver
AWUSBFEX soc=00001663(F1C100s) 00000001 ver=0001 44 08 scratchpad=00007e00 00000000 00000000
root@hj-virtual-machine:/home/hj# sudo sunxi-fel -p spiflash-read  0x0  1024  read.dat
usb_bulk_send() ERROR -1: Input/Output Error
root@hj-virtual-machine:/home/hj# sunxi-fel ver
usb_bulk_send() ERROR -1: Input/Output Error

不是spiflash-read,就是read/readl读内存。看不涉及flash的操作有没有问题;读小块内存、读大块内存有没有区别。

#169 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 求推荐一款芯片.支持双摄(>=5M).性价比要高.资料要开放程度大,开发简单. » 2019-12-31 14:57:46

晕哥小弟 说:

没有.就双摄 >= 5M就行

要说一下双摄是怎么用的。如果是相机类,双摄不同时开,应该可以把两个摄像头的引脚接在一起,powerdown分开控制,mclk上加个模拟开关。

#171 Re: 全志 SOC » 烧写usb报错 » 2019-12-31 00:25:37

cris8259 说:

自己画了个板子,usb能识别,但是烧写报错是怎么回事

root@hj-virtual-machine:/home/hj# sunxi-fel ver
AWUSBFEX soc=00001663(F1C100s) 00000001 ver=0001 44 08 scratchpad=00007e00 00000000 00000000
root@hj-virtual-machine:/home/hj# sudo sunxi-fel -p spiflash-write 0 u-boot/u-boot-sunxi-with-spl.bin
usb_bulk_send() ERROR -1: Input/Output Error

用sunxi-fel的read和write读写大块内存试试,看是不是USB传输数据量比较大时就出错。

#173 Re: 全志 SOC » 【这是一个看完你会回复握草的帖子】 开源项目,Linux名片,使用全志f1c100s » 2019-12-25 14:45:03

xgui 说:

第一张图,三个那么小的功率电感,看起来应该是0805封装,请问如何做到的?哪里有买?

立创商城,搜功率电感,封装选0805。内阻比较大,没用过。

#175 Re: 全志 SOC » 【这是一个看完你会回复握草的帖子】 开源项目,Linux名片,使用全志f1c100s » 2019-12-25 13:02:48

以前看到好几个国外玩家做PCB名片的,都是插USB供电。比较有意思的有这个 StyloCard https://mitxela.com/projects/stylocard,在名片上做了个MIDI键盘。

#176 Re: 全志 SOC » 多个SOC的耳机音频输出,是否可以汇聚一点? » 2019-12-15 23:22:43

迪卡 说:

https://whycan.cn/files/members/1228/agrgdd.png
还有1个SOC的输出,可不可以即接到耳机孔,也接到功放呢?

如果是想要同时接功放和耳机,一般会让插耳机时喇叭静音,需要用到图中耳机插座的1和5脚。
未插耳机时1和5脚是内部有个铜片是闭合的,当耳机插入时把铜片顶开,1和5脚断开。利用这个信号改变功放芯片的使能,使喇叭静音。同时,主控端也可以利用这个信号检测耳机插入,做到耳机和外放有不同的音量控制。

#177 Re: 全志 SOC » 多个SOC的耳机音频输出,是否可以汇聚一点? » 2019-12-15 23:15:25

迪卡 说:

我看到这样一个原理图,将SOC的HPR 和 HPL,通过串联电容和电阻,汇聚到了一点,然后再通过电容电阻接到了功放上面。
我画个图示意一下:
https://whycan.cn/files/members/1228/%20(2).png
我想,我如果有2个SOC,我是不是可以将两个SOC的HPR HPL都接到一个3.5MM耳机座上。像这样。
https://whycan.cn/files/members/1228/asvbsSdfdd.png
不知道这样可不可行,对音频这部分不太懂...

图1电路的作用是双声道转单声道,即把两个声道的信号取平均值。
按图2,两个Soc输出的左声道用电阻接在一起,当只有一个Soc输出声音时,另一边不一定处于什么状态。如果是HPR1是高阻态,则最后输出的信号应该约等于HPR2;如果HPR1是静音但仍在输出,则最后的信号约为HPR2的一半。所以可能会有音量不确定的情况。

#178 Re: 全志 SOC » 今天确定了两件事:F1C100S的CPU频率和DRAM频率设置 » 2019-12-13 08:48:30

kekemuyu 说:

没有休眠模式

你可以试试用这个汇编进入类似于休眠状态,但功耗也不会非常低。

__asm__ __volatile__("mcr p15, 0, %0, c7,c0,4" :: "r"(0));

这是ARM926EJ-S手册上提到的 Dynamic power management (wait for interrupt mode) 。我只简单试了一下,在我的板子上低了10mA。没试过唤醒:D。

#179 Re: 全志 SOC » F1C100S裸奔framebuffer+PWM+GPIO驱动 » 2019-12-10 11:28:04

gui401 说:

你好@达克罗德  我用这个裸机工程在while(1)里通过寄存器翻转某个IO,示波器测频率只能达到3MHz,有办法提高吗?while里就read32和write32语句写0写1都执行一次读写,按道理不应该这么慢啊

确实就是这么慢。如果你翻转时,同一组的其他IO口的状态是确定的,那可以省略一次read32,直接写值,速度能到6.xMHz。

#180 Re: 全志 SOC » 电池电量检测 » 2019-12-03 20:21:49

cris8259 说:

请问,f1c100s用电池供电的话
1. 电池电量怎么检测,用LRADC吗?大概是个什么用法?
2. 像电池供电设备长按开关机是怎么实现的?
3. USB给锂电池充电求便宜好用的芯片

这几个我正都有用到,说说做法:
先说长按开关机
Screen%20Shot%202019-12-03%20at%2020_06_10.png

S1是电源键,按下后Q1导通,系统上电。系统启动后把PWD_EN引脚置高,就能保持开机。
S1的按下状态可以通过BUT_POWER检测到,长按关机就是把PWD_EN置低。
我这里是需要较大电流放电,所以Q1用了功率MOS管。也可以直接接DC-DC的使能。

电量检测是把VIN接两个电阻分压,分到1.xV以下,接LRADC。LRADC有寄存器可以读到电压值,精度比较粗,勉强够用。

便宜的单节锂电池充电用4056。

#181 Re: Qt/MSVC/MINGW/C++/MFC/GTK+/Delphi/BCB » 8款免费/开源的 CAD 软件 » 2019-12-02 13:17:15

达克罗德 说:

为啥我下的qcad也是试用版,难道不再开源免费了?

有些插件不开源,是试用版,比如DWG支持。

#182 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 新手买了个示波器, 是坏的吗? » 2019-11-17 23:28:53

playflash 说:

谢谢指点。 1mv档位, 8格算8mv的话, 噪声有1/8。
实际上我用到20mv档位, 在这个档位,也有10mv的噪声,勉强能用。

默认垂直位置不居中,如第一个图,向上偏移了一格,是故障吗 ?

不知道你是用来测什么。在大多数应用里,根本不需要测到这个精度。不管是1mV还是10mV,都是很小的。
实际上我平时用的示波器最小一档精度也就20mV,20mV档时噪声很多,只能看个大概。很少用的着100mV以下档位。
你可以先把右上角“耦合-交流”切换成“直流”,调到1V档位,直接量电池的正负极。波形如果很直,没有噪声,那就基本没问题。再慢慢调到更高精度档位,看什么时候出现明显的噪声。

至于在1mV档位下,向上偏了0.5mV……实在太小了,就忽略吧。

#183 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 新手买了个示波器, 是坏的吗? » 2019-11-16 08:24:47

1mV档这个噪声算很小吧,不管测什么,环境带来的干扰都会有,1mV档太敏感了。
切到100mV档,测个电池看看?

#184 Re: 全志 SOC » 哈,用JLink把全志allwinner V3s内置的BROM读出来了 » 2019-10-29 17:28:14

晕哥 说:
qiefei 说:

the brom codes are on the github!

在哪里,有没有地址?

这个? https://github.com/allwinner-zh/bootloader

#185 Re: Cortex M0/M3/M4/M7 » 关于6轴惯性模块的姿态解算问题请教 » 2019-10-29 09:12:17

钱泰多 说:

加速度,四元数,欧拉角这些我都知道怎么得到,只是 我所说的“提起”  “放下”  是一个动态的过程,有加速度变化的过程,我想知道的是如何识别这个过程,相关算法和思路

从加速度里去除重力加速度,加速度积分得到速度,速度积分得到位移。
检测:一段时间内,速度从接近0(<a),到>m,又到<a。在这段时间内,位移>n,则为提起。同理反过来是放下。

#187 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » Freetype 内存回收 » 2019-10-05 19:42:21

cache是自动管理的,不用清理。如果调用Freetype取字符位图比较频繁,还是让Freetype自己管理cache比较好。

#188 Re: 全志 SOC » 刚入坑f1c100s,萌新有问 » 2019-09-30 11:20:25

cris8259 说:
ippen 说:

9. 短接1、4脚可以让f1c100s无法识别spi flash,进入usb fel 模式,这个我经常干,用来刷spi flash的

能用就行。只是没搞明白,cs拉低为啥能行,我们用stm32硬件里有时候把cs直接接地,可以省一个IO脚

不同的SPI设备,CS用法不一样。SPI Flash的CS也是用来传输信号的,表示命令的边界。所以CS一直拉低就不能正常从Flash读数据了。
其他SPI设备有的只要一直拉低着CS就能用,这时CS就仅仅是片选的作用。

#189 Re: ESP32/ESP8266 » m5stickc积木式编程 » 2019-09-24 09:07:36

firstman 说:

这个是基于编程猫改的吧,界面很像

Google Blockly为基础做的。

#191 Re: 全志 SOC » 荔枝派licheepi nano 全志(allwinnner) F1C100s 9.9¥ 开发板记录 (多图,流量党慎入!) » 2019-09-01 21:49:09

迪卡 说:

818有时候也不正常,不一定保证每个板子都可以。
目前我试的720Mhz每个板子都可以的

Mark.
超到720MHz功耗增加多少?发热厉害吗?

#192 Re: 全志 SOC » 开源自己画的一个F1C100S板子和原理图,摄像头和屏幕同时引出,所有io引出 » 2019-08-21 20:16:04

谢谢,学习了。用F1C100s画了好几块板了,每次供电部分都布得很纠结。下次学你的做法,在底部焊盘周围走线。
发现我把底部焊盘画的过大了,所以没什么空间走线。

#193 Re: 全志 SOC » xboot的json配置各个字段的意思 » 2019-07-28 22:17:06

xboot没有很详细的文档,最好的方法是,对照芯片手册读驱动代码。这些字段一般都是读出来后,用于读写某个寄存器,或者算寄存器地址。
gpio-count是这一组IO口的数量,PA/PB等等是一组IO口,具体包含几个不一定。

#194 Re: 全志 SOC » F1C100S 看门狗时钟源LOSC使能找不到在哪 » 2019-07-19 13:10:34

LOSC是内置的振荡器吧,不用使能,直接用就好。

#195 Re: 全志 SOC » 编译、安装Windows版本sunxi-fel步骤 (32M spi flash补丁,支持W25Q256/MX25L256) » 2019-07-10 13:10:06

hzpyl 说:

请问
运行zadig-2_3.exe
USB选择,只能显示 Unknown Device #1   (上面那个是鼠标)
会是什么问题?

启动时短路Flash 1、4脚了吗?如果操作正确还进不去FEL模式,那大概率是硬件问题。

#198 Re: 全志 SOC » F1C100s如何在uboot触发芯片进入usb otg烧录模式 » 2019-07-03 23:52:09

xm1994 说:

uboot: go 0xffff0020

这样进入FEL模式,可以用sunxi-fel操作SPI Flash吗?我在自己的代码中跳转到0xffff0020,能进入FEL模式,但操作Flash失败。
之前研究了一下下最后也没成功 https://whycan.cn/t_2072.html

#199 Re: 全志 SOC » F1C100S核心板嘉立创打样成本费用计算 » 2019-06-18 21:47:41

迪卡 说:

手册可以分享一下吗?一直在用C600的手册做C100s。

#200 Re: 全志 SOC » F1C100S PE11 CLK_OUT输出时钟问题 » 2019-06-15 10:18:36

你是裸奔代码吗?参考https://whycan.cn/t_1457.html代码里的PWM驱动。duty和period要参考手册计算一下,忘了是多少了,可以调成12MHz占空比50%的波形。

#201 Re: 全志 SOC » Setup toolchain for F1C100S / F1C200S on OSX 在OSX上为F1C100S/F1C200S设置 » 2019-06-15 10:10:35

@hoel  I develop for F1C100s on OSX, but the toolchain configuration may depend on what you are building. I only build barebone code and XBoot, no Linux or U-Boot.
You can first try the barebone code minimal_f1c100s_framebuffer.zip from this post: https://whycan.cn/t_1457.html.

1. Download the official gcc-arm-none-eabi from https://launchpad.net/gcc-arm-embedded/+download. I'm using an older version gcc-arm-none-eabi-5_2-2015q4. Extract and add `gcc-arm-none-eabi/bin` to PATH.

2. Extract minimal_f1c100s_framebuffer.zip. Edit `Makefile`, change `CROSS_COMPILE` to `arm-none-eabi-`.
3. `cd tools/mksunxi`, delete the Linux version `mksunxi` and make the OSX version.
3. Run `make` in `minimal_f1c100s`. The build succeeds if you see output "The bootloader head has been fixed".

4. `git clone https://github.com/Icenowy/sunxi-tools.git -b spi-rebase`, then build the OSX version of sunxi-tools.
5. Run `sunxi-fel -p spiflash-write 0 build/firmware.bin` to download the firmware to F1C100s.

#202 Re: 全志 SOC » F1C100S PE11 CLK_OUT输出时钟问题 » 2019-06-15 09:33:23

CSI_CLK的意思不是摄像头MCLK,是芯片内CSI功能的时钟。
摄像头MCLK我是用F1C100s的PWM代替有源晶振,PE12(PWM0)调成12M输出,妥妥的。

#203 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 买了个MICROMAKE LCD光固化打印机,打印whycan.cn网址测试了一下精度很高 » 2019-06-13 09:35:13

有个ONO 3D打印机,比这个还简单,连LCD屏都不要,是把手机塞到机器底部,用手机屏幕发出的光去固化树脂。手机App控制屏幕上显示的光点,一层一层固化,打印机本身只负责一层层提升打印平台。
不过他们家的树脂是特殊的,不是常见的紫外线固化树脂。
机器只要99美元,树脂比普通的贵。

#204 全志 SOC » CES Asia上的全志展台 » 2019-06-13 09:23:49

Quotation
回复: 1

在上海举办的CES Asia,全志展台感觉是几家代理商展示各种方案和产品。
还看到了F1C100s做的掌机。

IMG_20190611_143514.jpg
IMG_20190611_143939.jpg
IMG_20190611_144128.jpg

#205 Re: 全志 SOC » 哪款芯片能同时接摄像头和LCD? » 2019-06-10 23:25:51

tianjjff 说:

DVP驱动可否参考一下,正在驱动摄像头

CSI部分驱动如下。没有考虑什么通用性,只是针对我需要的数据格式。(UYVY -> YUV422)
只有捕捉单张图像,没有视频。

/*
 * driver/csi-f1c100s.c
 */

#include <xboot.h>
#include <clk/clk.h>
#include <reset/reset.h>
#include <gpio/gpio.h>
#include <csi/csi.h>

enum {
    CSI_EN				= 0x000,
    CSI_CFG				= 0x004,
    CSI_CAP 			= 0x008,
    CSI_SCALE			= 0x00c,
    CSI_FIFO0_BUFA		= 0x010,
    CSI_FIFO0_BUFB		= 0x014,
    CSI_FIFO1_BUFA		= 0x018,
    CSI_FIFO1_BUFB		= 0x01c,
    CSI_FIFO2_BUFA		= 0x020,
    CSI_FIFO2_BUFB		= 0x024,
    CSI_BUF_CTL			= 0x028,
    CSI_BUF_STA			= 0x02c,
    CSI_INT_EN			= 0x030,
    CSI_INT_STA			= 0x034,
    CSI_HSIZE			= 0x040,
    CSI_VSIZE			= 0x044,
    CSI_BUF_LEN			= 0x048,
};

enum {
    CSI_SIZE_MASK		= 0x1fff,	// 13 bits
};

struct csi_f1c100s_pdata_t {
    virtual_addr_t virt;
    char * clk;
    char * dramclk;
    int reset;
    int hsync;
    int hsynccfg;
    int vsync;
    int vsynccfg;
    int pclk;
    int pclkcfg;
    int database;
    int datacfg;
    int databits;
};

static void csi_f1c100s_get_size(struct csi_t * csi, int* width, int* height)
{
    struct csi_f1c100s_pdata_t * pdat = (struct csi_f1c100s_pdata_t *)csi->priv;

    if (width) {
        *width = (read32(pdat->virt + CSI_HSIZE) >> 16) & CSI_SIZE_MASK;
    }
    if (height) {
        *height = (read32(pdat->virt + CSI_VSIZE) >> 16) & CSI_SIZE_MASK;
    }
}

static void csi_f1c100s_set_size(struct csi_t * csi, int width, int height)
{
    struct csi_f1c100s_pdata_t * pdat = (struct csi_f1c100s_pdata_t *)csi->priv;

    uint32_t hsize = read32(pdat->virt + CSI_HSIZE);
    hsize &= ~(CSI_SIZE_MASK << 16) & ~(CSI_SIZE_MASK << 0);
    hsize |= ((width * 2) & CSI_SIZE_MASK) << 16;  // YUV每像素2字节
    write32(pdat->virt + CSI_HSIZE, hsize);

    uint32_t vsize = read32(pdat->virt + CSI_VSIZE);
    vsize &= ~(CSI_SIZE_MASK << 16) & ~(CSI_SIZE_MASK << 0);
    vsize |= (height & CSI_SIZE_MASK) << 16;
    write32(pdat->virt + CSI_VSIZE, vsize);

    // buffer len
    uint32_t buflen = read32(pdat->virt + CSI_BUF_LEN);
    buflen &= ~(CSI_SIZE_MASK << 0);
    buflen |= (width & CSI_SIZE_MASK);  // Y最长,每像素1字节
    write32(pdat->virt + CSI_BUF_LEN, buflen);
}

static void csi_f1c100s_set_buffer(struct csi_t * csi, void* buffer, int len)
{
    struct csi_f1c100s_pdata_t * pdat = (struct csi_f1c100s_pdata_t *)csi->priv;

    // 只用BUFA,3个FIFO必须都设置上
    write32(pdat->virt + CSI_FIFO0_BUFA, (uint32_t)buffer);
    write32(pdat->virt + CSI_FIFO1_BUFA, (uint32_t)buffer + len * 2 / 4);
    write32(pdat->virt + CSI_FIFO2_BUFA, (uint32_t)buffer + len * 3 / 4);
    write32(pdat->virt + CSI_BUF_CTL, read32(pdat->virt + CSI_BUF_CTL) & ~(1 << 0));
}

static int csi_f1c100s_capture_still(struct csi_t * csi)
{
    struct csi_f1c100s_pdata_t * pdat = (struct csi_f1c100s_pdata_t *)csi->priv;

    // begin capture
    write32(pdat->virt + CSI_CAP, read32(pdat->virt + CSI_CAP) | (1 << 0));
    // clear int status
    write32(pdat->virt + CSI_INT_STA, read32(pdat->virt + CSI_INT_STA));

    // wait for capture start then stop
    ktime_t timeout = ktime_add_ms(ktime_get(), 2000);
    int captured = 0;
    do {
        if(read32(pdat->virt + CSI_INT_STA) & (1 << 0)) {
            captured = 1;
            break;
        }
    } while(ktime_before(ktime_get(), timeout));

    return captured;
}

static struct device_t * csi_f1c100s_probe(struct driver_t * drv, struct dtnode_t * n)
{
    struct csi_f1c100s_pdata_t * pdat;
    struct csi_t * csi;
    struct device_t * dev;
    virtual_addr_t virt = phys_to_virt(dt_read_address(n));
    char * clk = dt_read_string(n, "clock-name", NULL);
    char * dramclk = dt_read_string(n, "dram-clock-name", NULL);

    pdat = malloc(sizeof(struct csi_f1c100s_pdata_t));
    if(!pdat)
        return FALSE;

    csi = malloc(sizeof(struct csi_t));
    if(!csi)
    {
        free(pdat);
        return FALSE;
    }

    pdat->virt = virt;
    pdat->clk = strdup(clk);
    pdat->dramclk = strdup(dramclk);
    pdat->reset = dt_read_int(n, "reset", -1);
    pdat->hsync = dt_read_int(n, "hsync-gpio", -1);
    pdat->hsynccfg = dt_read_int(n, "hsync-gpio-config", -1);
    pdat->vsync = dt_read_int(n, "vsync-gpio", -1);
    pdat->vsynccfg = dt_read_int(n, "vsync-gpio-config", -1);
    pdat->pclk = dt_read_int(n, "pclk-gpio", -1);
    pdat->pclkcfg = dt_read_int(n, "pclk-gpio-config", -1);
    pdat->database = dt_read_int(n, "data-gpio-base", -1);
    pdat->datacfg = dt_read_int(n, "data-gpio-config", -1);
    pdat->databits = dt_read_int(n, "data-bits", -1);

    csi->name = alloc_device_name(dt_read_name(n), -1);
    csi->get_size = csi_f1c100s_get_size;
    csi->set_size = csi_f1c100s_set_size;
    csi->set_buffer = csi_f1c100s_set_buffer;
    csi->capture_still = csi_f1c100s_capture_still;
    csi->priv = pdat;

    clk_enable(pdat->clk);
    clk_enable(pdat->dramclk);
    if(pdat->reset >= 0) {
        reset_deassert(pdat->reset);
    }
    if(pdat->hsync >= 0) {
        if(pdat->hsynccfg >= 0) {
            gpio_set_cfg(pdat->hsync, pdat->hsynccfg);
        }
        gpio_set_pull(pdat->hsync, GPIO_PULL_UP);
    }
    if(pdat->vsync >= 0) {
        if(pdat->vsynccfg >= 0) {
            gpio_set_cfg(pdat->vsync, pdat->vsynccfg);
        }
        gpio_set_pull(pdat->vsync, GPIO_PULL_UP);
    }
    if(pdat->pclk >= 0) {
        if(pdat->pclkcfg >= 0) {
            gpio_set_cfg(pdat->pclk, pdat->pclkcfg);
        }
        gpio_set_pull(pdat->pclk, GPIO_PULL_UP);
    }
    if (pdat->database) {
        for (int i = 0; i < pdat->databits; i++) {
            if(pdat->datacfg >= 0) {
                gpio_set_cfg(pdat->database + i, pdat->datacfg);
            }
            gpio_set_pull(pdat->database + i, GPIO_PULL_UP);
        }
    }

    // input format: YUV422
    // input sequence: UYVY
    // output format: planar YUV 422
    // vref polarity: high
    // href polarity: low
    // pclk polarity: high
    write32(pdat->virt + CSI_CFG,
            (3 << 20) | (0 << 16) | (2 << 8)  // YUV
            | (1 << 2) | (1 << 1) | (0 << 0));
    write32(pdat->virt + CSI_EN, read32(pdat->virt + CSI_EN) | (1 << 0));

    if(!register_csi(&dev, csi))
    {
        clk_disable(pdat->clk);
        free(pdat->clk);

        clk_disable(pdat->dramclk);
        free(pdat->dramclk);

        free_device_name(csi->name);
        free(csi->priv);
        free(csi);
        return NULL;
    }
    dev->driver = drv;

    return dev;
}

static void csi_f1c100s_remove(struct device_t * dev)
{
    struct csi_t * csi = (struct csi_t *)dev->priv;
    struct csi_f1c100s_pdata_t * pdat = (struct csi_f1c100s_pdata_t *)csi->priv;

    if(csi && unregister_csi(csi))
    {
        clk_disable(pdat->clk);
        free(pdat->clk);

        clk_disable(pdat->dramclk);
        free(pdat->dramclk);

        free_device_name(csi->name);
        free(csi->priv);
        free(csi);
    }
}

static void csi_f1c100s_suspend(struct device_t * dev)
{
}

static void csi_f1c100s_resume(struct device_t * dev)
{
}

static struct driver_t csi_f1c100s = {
    .name		= "csi-f1c100s",
    .probe		= csi_f1c100s_probe,
    .remove		= csi_f1c100s_remove,
    .suspend	= csi_f1c100s_suspend,
    .resume		= csi_f1c100s_resume,
};

static __init void csi_f1c100s_driver_init(void)
{
    register_driver(&csi_f1c100s);
}

static __exit void csi_f1c100s_driver_exit(void)
{
    unregister_driver(&csi_f1c100s);
}

driver_initcall(csi_f1c100s_driver_init);
driver_exitcall(csi_f1c100s_driver_exit);

以下为SCCB部分,SCCB只是I2C的特例,所以就在I2C驱动里加了2个函数:

int i2c_sccb_write(const struct i2c_device_t * dev, uint8_t reg, uint8_t data)
{
	uint8_t msg_data[2] = { reg, data };
	struct i2c_msg_t msg[1];

	msg[0].addr = dev->addr;
	msg[0].flags = 0;
	msg[0].len = 2;
	msg[0].buf = msg_data;

	int ret = i2c_transfer(dev->i2c, msg, 1);
	return (ret == 1) ? 1 : 0;
}

int i2c_sccb_read(const struct i2c_device_t * dev, uint8_t reg, uint8_t* out)
{
	uint8_t msg_data[2] = { reg, 0xee };
	struct i2c_msg_t msg[2];

	// write address
	msg[0].addr = dev->addr;
	msg[0].flags = 0;
	msg[0].len = 1;
	msg[0].buf = msg_data;

	// read back
	msg[1].addr = dev->addr;
	msg[1].flags = I2C_M_RD;
	msg[1].len = 1;
	msg[1].buf = msg_data + 1;

  	int ret = i2c_transfer(dev->i2c, msg, 2);
  	if (ret == 2) {
  		*out = msg_data[1];
  		return 1;
  	} else {
  		return 0;
  	}
}

#208 Re: 全志 SOC » F1C100s的ADC和模拟参考电压关系 » 2019-05-29 11:01:43

我的板子照着荔枝派Nano(F1C100s)画的,接法跟你的不一样。你的接法跟彩虹派(V3s)、F1C100唱戏机是一样的。
看起来,只在VRA2接200K电阻到GND是合理的,VRA1不需要接电阻。

VRA接法

#209 Re: 全志 SOC » F1C100s的ADC和模拟参考电压关系 » 2019-05-24 10:58:06

阻值一样啊。这可蹊跷了,难道有不同版本的芯片?

#210 Re: 全志 SOC » F1C100s的ADC和模拟参考电压关系 » 2019-05-23 22:21:43

rf 说:

VRA1,VRA2都是接了一电阻一电容

多大阻值的?

#211 Re: 全志 SOC » F1C100s的ADC和模拟参考电压关系 » 2019-05-23 16:15:42

rf 说:

兄弟,我的板子AVCC是3.0V,vra都是1.5v,adc值应该加上32767才对。加24000测出来的不对,按理f1c100s,adc读出来是-32767~32768,所以加32767才对的。我还以为是我的电路设计得不对

诶?你这个值更合理啊,VRA1/VRA2电路是怎么接的?我是按照荔枝派Nano画的。

#212 Re: 全志 SOC » 成功打响在f1c100s运行go程序的第一炮 » 2019-05-19 22:05:57

有意思,Go能编译成native二进制程序确实是大优势。

#213 Re: 全志 SOC » 有没有音频放大器推荐? » 2019-05-13 16:29:00

木子猫 说:

是mcu+dac,音频数据乘以系数这我了解下 还没想到有这个方法

一般把原始音频数据作为最大音量,用整数乘法加移位代替浮点乘法,运算量很小的。  (v * 50) >> 8 像这样。

#214 Re: 全志 SOC » 有没有音频放大器推荐? » 2019-05-10 09:34:31

木子猫 说:
Zodiac 说:

https://www.sunrom.com/p/m62429-digital-pot
可以参考下应用电路和代码。两线控制,用起来蛮方便。

看起来确实很简洁

几毛钱的功放用两块多钱的数字电位器调音量,总觉得哪里不对:D

#215 Re: 全志 SOC » 有没有音频放大器推荐? » 2019-05-10 09:26:48

木子猫 说:
Quotation 说:

3w又便宜的容易找,带I2C的就没有很便宜的了。不知楼主需要的是调节什么参数?

想调节音量

如果功放音频输入是来自SoC输出,那都可以在SoC/MCU端软件调节音量。像全志的SoC,DA本身带音量调节。或者简单的MCU+DAC,只要把取出来的音频数据都乘一个系数就是调音量了。
除非是要做纯粹的音箱,否则不太需要功放带音量调节功能。不带音量调节的功放又好又便宜的很容易找。

#216 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 请问这种螺丝柱是通过什么工艺弄进去的? » 2019-05-10 02:49:51

这是嵌件,不是注塑注进去的,是装配时加热压进去。塑胶件孔径做小一点,装配时把螺母加热,使劲压进去。
这个是相机、摄像头的接口吧。

#217 Re: 全志 SOC » 有没有音频放大器推荐? » 2019-05-09 09:47:45

3w又便宜的容易找,带I2C的就没有很便宜的了。不知楼主需要的是调节什么参数?

#218 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 弱弱地问一句。有人用模拟开关切换扩展过电容触摸按键不? » 2019-05-09 09:41:24

没试过,猜测应该可以,可能要选性能好一些的模拟开关。
电容触摸按键原理是给小电容反复充放电,电流很小,可以到1微安级别,充放电时间也短。如果模拟开关本身漏电流较大、寄生电容大,可能会影响检测效果。

#220 Re: 全志 SOC » 一直以为全志第三方烧录软件 sunxi-fel 只有命令行版本,原来社区早就有了GUI版本了, C#写的 » 2019-04-24 14:58:56

这只是个壳,调用了sunxi-fel.exe,不是重新实现一遍。
其实用python写个GUI封一下sunxi-fel的功能,用不了多少行代码。
只是GUI也带不来多少方便,日常使用还不如用命令行,在makefile里调用sunxi-fel,编译完了直接烧录。

#221 Re: 全志 SOC » 编译、安装Windows版本sunxi-fel步骤 (32M spi flash补丁,支持W25Q256/MX25L256) » 2019-04-18 09:05:13

经过一番猛如狗的装驱动操作,我编译的sunxi-fel.exe不用带libusb-1.0.dll也能用了(捂脸)。
libusb-1.0只是用户态驱动,底层还是需要依赖于Zadig带的那几种驱动。反正是把Zadig里几个驱动挨个装了一遍就好了。

#222 Re: 全志 SOC » 编译、安装Windows版本sunxi-fel步骤 (32M spi flash补丁,支持W25Q256/MX25L256) » 2019-04-17 14:10:46

Quotation 说:

为什么我照这个步骤编译出来的sunxi-fel.exe有785K,晕哥的版本只有100K。
而且我的运行后无任何输出,连帮助都不打印。
在Ubuntu 18.10上编译的。

哦错了,晕哥版本有400K。

经过试验,发现了把libusb-1.0.dll换成晕哥的版本就可以运行了。我之前用自己编译出的libusb-1.0.dll,大小1M,会导致程序运行后无任何反应。晕哥版本只有253K。编译结果大小的差异是怎么来的呢?

#223 Re: 全志 SOC » 编译、安装Windows版本sunxi-fel步骤 (32M spi flash补丁,支持W25Q256/MX25L256) » 2019-04-17 12:28:54

为什么我照这个步骤编译出来的sunxi-fel.exe有785K,晕哥的版本只有100K。
而且我的运行后无任何输出,连帮助都不打印。
在Ubuntu 18.10上编译的。

晕哥 说:

有朋友说楼上的文件不能识别f1c100s,
那再重新来一次下载源码,编译.
……

直接用命令行指令编译

i686-w64-mingw32-gcc -std=c99 -Wall -Wextra -Wno-unused-result -D_POSIX_C_SOURCE=200112L -D_BSD_SOURCE -D_DEFAULT_SOURCE -Iinclude/ -DNO_MMAP -I/usr/i686-w64-mingw32/include/libusb-1.0/ -o sunxi-fel.exe fel.c thunk.c progress.c soc_info.c fel_lib.c fel-spiflash.c -lws2_32  -L/usr/i686-w64-mingw32/lib/ -lusb-1.0 -lws2_32 -lwsock32 -lz

Windows平台可执行文件下载: sunxi-tools-win32support_f1c100s_flash_2.7z (已经验证,可以烧录f1c100s 唱戏机与licheepi nano开发板)

Windows 驱动安装方法在1楼.

#224 Re: 全志 SOC » F1C100S自定义MiniPcie-AD17 » 2019-04-12 23:19:50

肚子开孔倒是个好办法,这样手焊就不用热风枪了。

#225 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 请教,24V车载供电给24V锂电池充电可行吗? » 2019-04-12 00:12:44

Gentlepig 说:
Quotation 说:

锂电池充电要用专门的电源管理芯片,不能直接给个电压就充,否则很有安全性问题。
29.4是7节锂电池串联的,我也不知道用什么芯片,只做过1节和2节的。

电池内部是有保护电路的,但是内部保护电路耐压可能是30V或40V.
我担心的是,车载供电到底稳不稳,会不会有电压较高的时候。

不光是保护的问题,保护板一般只根据电压、电流,保护过充、过放、过流的情况。
充电管理芯片会根据电池实时电压,决定是恒流充还是恒压充,电流太小时切断充电,温度较低时以小电流充电,温度特别低时不充电。这些管理必须要有,否则锂电池容易出事故。

#226 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 请教,24V车载供电给24V锂电池充电可行吗? » 2019-04-11 12:49:44

锂电池充电要用专门的电源管理芯片,不能直接给个电压就充,否则很有安全性问题。
29.4是7节锂电池串联的,我也不知道用什么芯片,只做过1节和2节的。

#229 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 客户委托开发一个检测广告牌 灯光/卷轴电机/玻璃破碎 的前端方案, 用什么技术好呢? » 2019-04-05 21:09:11

1. 玻璃的裂缝不容易检测。如果只检测玻璃破了大洞的情况,可以在广告牌内外设咪头采集声音,如果内外声音音量差别变小了,就是玻璃破了。:D
2. 电机转动检测,在转动轴上固定一块磁铁,旁边用霍尔元件检测磁场。磁场一直不变则电机不转了。
3. 灯管就测电流吧,偏离正常值一定范围都当做有问题。用专门的电流传感器。

#230 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 客户委托开发一个检测广告牌 灯光/卷轴电机/玻璃破碎 的前端方案, 用什么技术好呢? » 2019-04-04 22:43:05

是要用摄像头拍摄图像监测广告牌有没有损坏?还是说用别的传感器监测广告牌被损坏,然后拍下来具体情况?

#232 Re: 全志 SOC » 关于 SD NAND 的信号切换。成功! » 2019-04-01 17:19:03

把SD Nand的引脚全引出,用测试夹夹上,接主控芯片再接电脑。这样估计也可以。Soc没上电的时候,引脚是高阻态,应该没有影响。
比如有的板子上SPI Flash烧录,就是用专门的夹子夹住接电脑烧的。

#233 Re: 全志 SOC » 关于 SD NAND 的信号切换。成功! » 2019-04-01 17:16:19

其实理论上sunxi-fel几乎什么都能干,参考sunxi-fel操作Flash的做法。写段C代码,编译成特定的格式,sunxi-fel的格式把代码传给SoC,执行。
当然写起来很麻烦就是了……

#234 Re: RISC-V » AIRV(K210)一体化开源硬件,3月底即将到来啦 » 2019-03-31 12:24:14

问个题外话,一楼这块板左侧的排针,没有塑胶部分,波峰焊时是怎么固定的?还是说先过完波峰焊再把塑胶拔掉?

main.jpg

#235 Re: Cortex M0/M3/M4/M7 » stm32F103定时器问题 » 2019-03-24 01:01:37

Gentlepig 说:

请教,每个定时器的四个PWM通道是固定IO口的,如果我想使任意IO口输出PWM波,能不能用定时器的PWM功能但不产生输出,而是我自己设置IO口?

想了个用DMA的方法也许可行,不占用CPU时间。
用定时器驱动DMA,再利用GPIO BSRR寄存器,交替设置IO口高低电平。

比如要用定时器控制PF3做PWM,首先
uint32_t src[2] = { GPIO_Pin_3, GPIO_Pin_3<<16 };
DMA目标设为src,DMA目标是&GPIOF->BSRR。循环DMA模式。
用定时器的PWM或update等驱动DMA运行,这样DMA向BSRR循环写入两个值,从而让PF3循环切换高低。

#236 Re: 全志 SOC » F1C100s的ADC和模拟参考电压关系 » 2019-03-22 16:34:37

电压值 = (ADC值 + 24000) / 65535 * AVCC

当ADC读数为0时,电压值==VRA。
ADC读数为-24000时,电压值==0。

#237 Re: 全志 SOC » Ubuntu core的内存占用,想在s3上移植 » 2019-03-22 13:48:35

镜像文件250MB大小,现在支持树莓派2、3等。
树莓派2是1GB内存,4核ARM A7。感觉跑在S3上会很吃力。

#238 Re: 全志 SOC » framebuffer对某些特定的颜色显示花屏 » 2019-03-21 16:47:39

smartcar 说:

有没有可能是屏幕问题呢?
换个屏试一试

也有可能……那个屏比较便宜。手头没有别的RGB屏,等调试i80屏的时候再试试。

#239 全志 SOC » framebuffer对某些特定的颜色显示花屏 » 2019-03-21 13:42:24

Quotation
回复: 4

荔枝派nano,480x272的RGB屏,用@达克罗德 的裸奔framebuffer代码 https://whycan.cn/t_1457.html。
在屏幕上画纯色,发现在某些特定颜色的时候,屏幕上显示的颜色里混杂了若干小黑点。

经过实验,当R/G/B中的任意一个为125~127,61~63之间的值时,显示的颜色会有黑点。猜测在31、15……附近也会有,但看不清楚了。
这是为什么?

下图对比了 RGB(0,124,0) 和 RGB(0,125,0)的情况。

rgb-compare.jpg

#240 Re: 全志 SOC » 请教个问题,V3S的spi flash选型。 » 2019-03-20 13:16:41

是128Mbit x1,不是128Mx1 bit,不是把两个数值乘起来的意思。
x1/x2/x4指的是SPI传输方式,有几条数据线,对应的速率不同。目前最多就到x4吧。

#241 Re: 全志 SOC » hi 请教一个lichee nano的问题 » 2019-03-18 22:55:34

串口在哪个pin看datasheet https://whycan.cn/files/members/3/F1C100s_Datasheet_V1_0.pdf。
你用的哪个固件?一般都会在串口输出点内容吧,去看代码里串口用的是哪个。
一般用uart0,不确定的话,把uart0的几种mapping都试一下就知道了:D。

#242 Re: 全志 SOC » F1C100s支持MCU接口液晶屏吗? » 2019-03-18 17:44:14

按晕哥的提示,参考了 彩虹派V3s开发板原理图A10 LCD 调试手册 这两份资料,画了块RGB屏转 i80屏的转接板。等打样回来慢慢调~
(图上丝印1脚和常用的线序是反的)

i80lcd-bridge-v1_0.png

#243 Re: 全志 SOC » 本站网友 @rainbow-pi 出品的高颜值开源 V3s 开发板 --- 彩虹派 » 2019-03-18 00:46:55

似乎 HPOUTR/HPOUTL 耳机输出到功放的接法有误。
耳机输出接口是双声道、单端音频输出。板子上当成了差分信号接到单声道功放,播放出来的声音应该会听起来不正常。
要么接双声道功放;要么把双声道接两个电阻转成单声道信号,再接功放。

没试过哈,只是根据原理图看的。彩虹派的同学可以验证一下。

#244 Re: 全志 SOC » F1C100s支持MCU接口液晶屏吗? » 2019-03-18 00:27:49

晕哥 说:

看下彩虹派的 V3s 开发板原理图,

他就是用 I80 的LCD

https://whycan.cn/t_1900.html

谢谢,明白了!做个板子试一下。

按照彩虹派的接法,SoC引脚到MCU屏的接法如下:
LCD_CLK  --  33Ω电阻  --  WR
LCD_DE  --  RS
LCD_HSYNC  --  RD

#245 Re: 全志 SOC » F1C100s支持MCU接口液晶屏吗? » 2019-03-17 23:25:13

引脚如何接呢?WR/RD对应于RGB屏的哪个引脚?

#246 全志 SOC » F1C100s支持MCU接口液晶屏吗? » 2019-03-17 18:07:56

Quotation
回复: 22

看到荔枝派Nano的LCD接口是RGB接口的。F1C100s手册里说TCON支持也MCU(i8080)接口,但是引脚只有适合RGB接口的HSYNC/VSYNC/DE,没有MCU屏的RD/WR。所以MCU接口的屏要怎么接呢?
似乎小尺寸的屏RGB接口的不多。

#247 Re: 全志 SOC » 支持MIPI摄像头的最便宜的是哪款芯片? » 2019-03-17 11:49:48

mikewen 说:

什么是 ISP ?  是 JPEG 压缩吗?  OV5647摄像头 带ISP 吗?

OV5647带了一部分ISP功能,自动曝光、自动白平衡是有的。输出格式只有原始的Bayer RGB一种,一般要自己再处理成普通的RGB/YUV图像。

#248 Re: 全志 SOC » 支持MIPI摄像头的最便宜的是哪款芯片? » 2019-03-17 11:43:14

mikewen 说:

什么是 ISP ?  是 JPEG 压缩吗?  OV5647摄像头 带ISP 吗?

大致是对光学传感器采集的原始信号做处理,实现像素格式转换、自动曝光、白平衡、伽马校正等等这些功能,还有降噪、增强等高级功能。如果摄像头带了ISP,主控芯片就直接取到可用的图像数据了。否则,摄像头就只是个原始的信号采集装置,主控要负责一大堆处理。

#249 Re: 全志 SOC » 支持MIPI摄像头的最便宜的是哪款芯片? » 2019-03-17 00:41:40

唉,还不光是通讯接口的问题。高分辨率的摄像头好像一般不带ISP,要求平台带ISP。低端摄像头反而自带ISP,对平台的要求低。看起来得用V3s/S3L了。

以前用过OV5640摄像头,是5MP、带ISP、带DVP,主控是简单了,但是摄像头本身贵了很多。

#250 全志 SOC » 支持MIPI摄像头的最便宜的是哪款芯片? » 2019-03-17 00:32:00

Quotation
回复: 8

5MP以上的摄像头基本都是MIPI接口了,全志有没有哪款芯片支持MIPI,而且便宜呢?
V3/S3系列是可以,不过价格跟C100s比起来,还是贵了很多。产品对价格比较敏感,希望能用刚刚好够用的便宜芯片。

#251 Re: 全志 SOC » F1C100s ADC使用一坑 » 2019-03-13 22:17:11

ZSB 说:

@Quotation 你好!我之前是用KEYADC,但是由于精度不够,现在想用音频ADC,想请教两个问题。
1、请问下音频ADC的参考电压怎么设置?我一直没找到那个寄存器,还是说参考电压是直接给某个引脚呢。
2、音频ADC输入检测是分正负的吧,相当于我做ADC检测的时候要把电压分压为正常的一半吗?

1. 参见这篇 https://whycan.cn/t_1727.html ,由AVCC电压决定的。
2. 需不需要分压看输入电压范围,范围也由AVCC决定。

#252 Re: 全志 SOC » 哪款芯片能同时接摄像头和LCD? » 2019-03-12 13:28:09

山无棱 说:
Quotation 说:

懂了,谢谢各位!不用很高级的屏幕,RGB666够了。

坐等大神把 C100 的 DVP 摄像头调通。

DVP摄像头已经在XBoot上调通了。不过我只做了我目前需要的功能,代码不通用。所以先不分享了。

#253 Re: 全志 SOC » 哪款芯片能同时接摄像头和LCD? » 2019-03-12 09:46:11

懂了,谢谢各位!不用很高级的屏幕,RGB666够了。

#254 Re: 全志 SOC » 哪款芯片能同时接摄像头和LCD? » 2019-03-12 09:08:11

微凉VeiLiang 说:

F1C100S接口不冲突,低两位才和摄像头共用引脚,不像v3s

从datasheet上看这几位都是和CSI冲突的,LCD的这几位实际用不到吗?

Screen-Shot-2019-03-12-at-08_57_54.png

#255 Re: 全志 SOC » 哪款芯片能同时接摄像头和LCD? » 2019-03-11 17:12:21

dgtg 说:

F1C100s也可以csi摄像头+RGB666输出的啊,看到过的

那有可能是SPI屏吧,带宽受限,做不到高刷新率。

#256 Re: 全志 SOC » 哪款芯片能同时接摄像头和LCD? » 2019-03-11 17:09:51

晕哥 说:

BGA的S3可以:   https://whycan.cn/t_2227.html

不错,S3很强悍啊。唯一的障碍是BGA封装,还没画过更没焊过BGA呢……

#257 全志 SOC » 哪款芯片能同时接摄像头和LCD? » 2019-03-11 11:10:50

Quotation
回复: 25

我想做个能实时采集视频并显示的东西,全志有什么芯片合适?最好是像F1C100s这样集成DRAM的。F1C100s的CSI和LCD复用了一些引脚,没法同时使用。

#258 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 接喇叭的音频芯片用哪个好? » 2019-03-11 00:12:27

达克罗德 说:

ns4168我也用过,电路极简单,不过貌似不便宜。想便宜就PT8211+8002。我拆过火火兔都用的8002

没错,8002才1毛多,声音够好了。

#259 Re: Cortex M0/M3/M4/M7 » 开源小小草科技的基于STM32H7的小掌机,PCB和源码都有哦 » 2019-03-08 09:28:03

赞啊!有时间我也要做一个。
STM32H7好贵啊,同样是400mHz,可以去隔壁看看全志F1C100s,10块钱多一点还自带32M内存。:D

#260 Re: 全志 SOC » 刚刚收到逻辑分析仪,挂V3s 上抓一下 SPI 数据包 » 2019-01-30 21:11:29

你用的sunxi-fel是哪里的代码?从代码里看,似乎没有对大于24bit的地址做特殊处理。

#261 全志 SOC » SPI Flash不能写入问题解决 » 2019-01-30 11:09:10

Quotation
回复: 2

F1C100s,XBoot下调用block和spi-flash驱动操作SPI Flash,能读,不能擦除不能写。

断断续续调了几天终于调通了,问题出在Flash CS时序。XBoot spi-flash驱动里的CS时序不满足我用的Flash的要求。
我用的Puya普冉的Flash(很便宜),数据手册里特意说了,某些操作必须在字节边界处置CS为高,这是出于数据保护的目的,检查命令长度,如果长度错了就不执行命令。

For the following instructions: WREN, WRDI, WRSR, PE, SE, BE32K, BE, CE, PP, DPP, QPP, DP, ERSCUR, PRSCUR, SUSPEND, RESUME, RSTEN, RST, the CS# must go high exactly at the byte boundary; otherwise, the instruction will be rejected and not executed.

也就是说SPI在发送完这几个命令和数据后,需要马上拉高CS。但XBoot里的Flash驱动是按照别的Flash写的,时序不满足这个要求。因此在spi-flash.c加入一些spi_device_select()和spi_device_deselect(),就能够擦除写入了!代码改动如下。

static void spi_flash_sector_erase(struct spi_device_t * dev, u64_t addr)
{
	u8_t tx[4];

	spi_device_select(dev);
	spi_flash_write_enable(dev);
	spi_device_deselect(dev);

	tx[0] = OPCODE_SE;
	tx[1] = (u8_t)(addr >> 16);
	tx[2] = (u8_t)(addr >> 8);
	tx[3] = (u8_t)(addr >> 0);
	spi_device_select(dev);
	spi_device_write_then_read(dev, tx, 4, 0, 0);
	spi_device_deselect(dev);

	spi_device_select(dev);
	spi_flash_wait_for_busy(dev);
	spi_device_deselect(dev);
}

static void spi_flash_sector_erase_4k(struct spi_device_t * dev, u64_t addr)
{
	u8_t tx[4];

	spi_device_select(dev);
	spi_flash_write_enable(dev);
	spi_device_deselect(dev);

	tx[0] = OPCODE_BE_4K;
	tx[1] = (u8_t)(addr >> 16);
	tx[2] = (u8_t)(addr >> 8);
	tx[3] = (u8_t)(addr >> 0);
	spi_device_select(dev);
	spi_device_write_then_read(dev, tx, 4, 0, 0);
	spi_device_deselect(dev);

	spi_device_select(dev);
	spi_flash_wait_for_busy(dev);
	spi_device_deselect(dev);
}

static void spi_flash_write_one_page(struct spi_device_t * dev, u64_t addr, u8_t * buf)
{
	u8_t tx[4];

	spi_device_select(dev);
	spi_flash_write_enable(dev);
	spi_device_deselect(dev);

	tx[0] = OPCODE_PP;
	tx[1] = (u8_t)(addr >> 16);
	tx[2] = (u8_t)(addr >> 8);
	tx[3] = (u8_t)(addr >> 0);
	spi_device_select(dev);
	spi_device_write_then_read(dev, tx, 4, 0, 0);
	spi_device_write_then_read(dev, buf, 256, 0, 0);
	spi_device_deselect(dev);

	spi_device_select(dev);
	spi_flash_wait_for_busy(dev);
	spi_device_deselect(dev);
}

按理说,可以用SPI硬件自动控制CS。sunxi-tools里就是这样做的,没有操作CS的代码,也能正确写入。但我还没调出来,目前仍然用软件控制CS。

#262 Re: 全志 SOC » XBOOT尺寸裁剪(170kB不带图形系统) » 2019-01-29 10:40:14

motoedy 说:

大佬能分享下你裁剪后的工程么?

这是我的工程,删了一些不用的文件和第三方库。如果你需要,再对照原始的工程添加回来。
编译出来的bin文件133kB。
xboot-size-opt.zip

#263 Re: 全志 SOC » 正常运行状态下,有没有办法切换到FEL模式? » 2019-01-19 16:15:51

basicdev 说:

就是说USB可以识别FEL设备,但是不能操作flash?
是不是spi外设时钟等没有配置好?

是,sunxi-fel writel/readl等命令都可以用,flash相关的命令不可用。
猜测是某些寄存器需要重置为初始状态,FEL不会做太多检查、初始化的动作。如果代码里已经初始化了SPI,可能需要恢复原状。

#264 Re: 全志 SOC » 正常运行状态下,有没有办法切换到FEL模式? » 2019-01-19 16:04:39

阶段性成果:目前能够在正常运行状态切换到FEL了,可以读写内存什么的。但是还无法通过sunxi-fel操作SPI Flash。

// xboot代码里把IRQ MASK全置1了,至少需要把USB-OTG(bit 26)置0才能进FEL。
write32(0x01C20400 + 0x30, 0);
// Control Register bit 13,使用高地址向量表
arm32_write_p15_c1(arm32_read_p15_c1() | (1 << 13));
// 跳转到FEL
asm("BX %0" : : "r"(0xFFFF0020));

#265 Re: 全志 SOC » 贡献个F1C100s ADC驱动(for XBOOT) » 2019-01-18 20:09:11

ZSB 说:

@Quotation @晕哥你们好!请问下F1C100S的KEYADC 可以当普通ADC用吗?比如做电量检测或者温度传感器检测?我直接对寄存器做了些配置,定时1S读数据寄存器但是每次读到的都是63。

可以,如晕哥所说,就是6bit精度有点低。我是用KEYADC做电量检测用,不用IRQ,IRQ是给做按键功能用的。每次需要值的时候读一下寄存器就好。

#266 Re: 全志 SOC » 正常运行状态下,有没有办法切换到FEL模式? » 2019-01-17 22:28:04

从这里 http://sunxi.org/FEL 的信息来看,似乎跳转到0xFFFF0020执行就是进FEL模式了,简单得难以置信。明天到公司试试。

#267 全志 SOC » 正常运行状态下,有没有办法切换到FEL模式? » 2019-01-17 16:19:15

Quotation
回复: 20

F1C100s,如何能从正常运行状态切换到FEL模式?
跑的xboot,在已经运行起来了的状态下,调用start.S里的return_to_fel,没用。程序进入了不正常的状态。

#268 Re: 全志 SOC » 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类) » 2019-01-15 11:15:22

在调试USB CDC中发现一处小bug。
CDC的规范要求,如果一次发送的数据长度是packet length的整数倍,则最后还需要发一个空的packet,表示结束。

涉及到2个文件的代码修改,如下:

int usb_cdc_send_data(unsigned char *buf,int len)
{
    int ret = usb_device_write_data(1, buf, len);
    if (ret != 0) {
        return ret;
    }

    // 长度整除packet_length时多发一个空packet,CDC协议要求的
    if (len % DATA_PACKET_SIZE == 0) {
        ret = usb_device_write_data(1, buf, 0);
    }
    return ret;
}

int usb_device_write_data(int ep,unsigned char * databuf,int len)
{
    int length = len;
    int write_len = 0;
    volatile int Timeout = 10000000;
    int pack_len = ep_max_len[ep];
    int data_pos = 0;
    if(usb_connect)
    {
        usbprint("usb_device_write_data len:%d",len);
        void * fifo = USBC_SelectFIFO(ep);
        USBC_SelectActiveEp(ep);
        do {
            while((USBC_Dev_IsWriteDataReady(USBC_EP_TYPE_TX))&&(--Timeout)); //等待清除写标志
            write_len = length > pack_len ? pack_len : length;
            USBC_WritePacket(fifo, write_len, databuf + data_pos);
            USBC_Dev_WriteDataStatus(USBC_EP_TYPE_TX,1);
            data_pos += write_len;
            length -= write_len;
            if(Timeout == 0)
            {
                usbprint("usb_device_write_data Time out!");
                return -1;
            }
            Timeout = 10000000;
        } while (length > 0);  // do..while 允许发0长度的packet
        return 0;
    }
    else
    {
        usbprint("usb_device_write_data faild! usb not connect!!");
        return -1;
    }
}

#269 Re: 全志 SOC » 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类) » 2019-01-14 12:38:41

小王子&木头人 说:

楼主修复8字节不能传的问题了吗

我自己改的能用了。调用USBC_ConfigFifo时还有些要注意的,关键修改在usb_dev.c的这段。
每次调用USBC_ConfigFifo,传入的offset/size应当是不同的。FIFO所占内存不能重叠,所以这一次调用的offset参数应当是上一次的offset+size。

static u32 fifo_offset = 0; // global

void usb_config_ep_in(int epidx,int maxpack,int type)
{
	u32 old_ep_idx  = 0;
	if(epidx)
	{
		usbprint("config int ep %d:%d , %d",epidx,maxpack,type);
		/* Save index */
		old_ep_idx = USBC_GetActiveEp();
		USBC_SelectActiveEp(epidx);
		u32 fifo_size = maxpack * 2;  // double buffer
		USBC_Dev_ConfigEp(type,USBC_EP_TYPE_TX,1,maxpack);
		USBC_ConfigFifo(USBC_EP_TYPE_TX, 1, fifo_size, fifo_offset);
		fifo_offset += fifo_size;
		USBC_INT_EnableEp( USBC_EP_TYPE_TX, epidx);
		USBC_SelectActiveEp(old_ep_idx);
		ep_max_len[epidx] = maxpack;
	}
}
void usb_config_ep_out(int epidx,int maxpack,int type)
{
	u32 old_ep_idx  = 0;
	if(epidx)
	{
		usbprint("config out ep %d:%d , %d",epidx,maxpack,type);
		/* Save index */
		old_ep_idx = USBC_GetActiveEp();
		USBC_SelectActiveEp(epidx);
		u32 fifo_size = maxpack * 2;  // double buffer
		USBC_Dev_ConfigEp(type,USBC_EP_TYPE_RX,1,maxpack);
		USBC_ConfigFifo(USBC_EP_TYPE_RX, 1, fifo_size, fifo_offset);
		fifo_offset += fifo_size;
		USBC_INT_EnableEp( USBC_EP_TYPE_RX, epidx);
		USBC_SelectActiveEp(old_ep_idx);
		ep_max_len[epidx] = maxpack;
	}
}

#270 Re: 全志 SOC » lvgl移植到裸跑的f1c100s上 » 2018-12-27 17:20:48

应该在主循环里每隔多少时间(比如30ms)调用一下
        lv_tick_inc(5);
        lv_task_handler();

其余的时间用来做别的。
并且lv_tick_inc的参数应当等于两次调用之间的时间间隔,否则动画会快慢不对。

#271 Re: 全志 SOC » V3s CSI如何Enable . » 2018-12-27 17:18:06

我在xboot上跑通了CSI。
除了video和CSI的clock,还要把DRAM_GATING_REG的CSI_DCLK_GATING打开,因为CSI要往DRAM里写图像数据。
CSI相关的IO口全初始化好,HSYNC/VSYNC/PCLK/DATA。
bus reset一下。
再CSI_EN,应该就可以了。

#272 全志 SOC » F1C100s ADC使用一坑 » 2018-12-13 19:00:26

Quotation
回复: 8

之前用F1C100s的音频ADC(FMIN、LINEIN)拿来采集模拟电压,但发现音频ADC内部应该有滤波电路之类的,输入阻抗低,所以要求输入信号是高阻抗的才行。毕竟是为音频应用设计的,没打算给人当通用ADC用。
比如把电池电压用两个几十K的电阻分压,或把热敏电阻串一个几十K的电阻测温度,这种情况不能直接把分压端接到ADC上。ADC引脚内部的电路会对分压产生影响,而且是非线性的。更坑的是每片IC还不一致,同样条件下测量出来也会不一样。

所以,对于用ADC采集分压的使用情况,有两个方法:
一是加个便宜的运放做电压跟随,提高输入阻抗,测量的就很准了。
二是用KEYADC(LRADC)。LRADC内部是先经过运放,所以小信号直接输入没问题。缺点是精度只有6bit,量个电池电压勉强够用。

#273 Re: 全志 SOC » 全志F1C100S usb裸机驱动移植(暂支持device hid类和cdc类) » 2018-11-29 09:15:15

请问CDC方式连到电脑上,为什么一次最多只能发送8个字节。发9个就全收不到,连IRQ都没有。并且后续什么都收不到了,需要断开连接,重连后正常。
楼主有没有遇到这个现象?
我是用Mac系统,系统识别出usbmodem,用串口通信发送数据。

#275 Re: 全志 SOC » v3s实现流水灯显示 » 2018-11-11 17:25:12

605364021 说:

用户层操作是指直接在开发板上操作?

是指在你自己的程序里就可以实现,不用改系统的东西。

#276 Re: 全志 SOC » 贡献个F1C100s ADC驱动(for XBOOT) » 2018-11-09 09:18:00

之前对ADC理解有误,现在修正了bug,更新一下代码。上面的代码作废。(话说本站不能编辑帖子吗?)
主要是对FIFO的理解:ADC向FIFO写入数据,写满后如果一直不读,新数据是被丢弃的,不会把旧数据挤走。所以要先清FIFO,等待下一帧数据到来再读取。

driver里加入adc-f1c100s.c:

/*
 * driver/adc-f1c100s.c
 *
 * F1C100s ADC driver for XBOOT.
 * Use Audio ADCs as generic ADC.
 *
 */

#include <xboot.h>
#include <clk/clk.h>
#include <reset/reset.h>
#include <adc/adc.h>

enum
{
	ADC_FIFOC			= 0x10,
	ADC_FIFOS			= 0x14,
	ADC_RXDATA			= 0x18,
	ADC_MIXER_CTRL		= 0x24,
	ADDA_TUNE			= 0x28,
	ADC_CNT				= 0x44,
	ADC_DG				= 0x4c,
	// ADC_DAP_CTR			= 0x70,
	// ADC_DAP_LCTR		= 0x74,
	// ADC_DAP_RCTR		= 0x78,
	// ADC_DAP_PARA		= 0x7C,
	// ADC_DAP_LAC			= 0x80,
	// ADC_DAP_LDAT		= 0x84,
	// ADC_DAP_RAC			= 0x88,
	// ADC_DAP_RDAT		= 0x8C,
	// ADC_DAP_HPFC		= 0x90,
	// ADC_DAP_LINAC		= 0x94,
	// ADC_DAP_RINAC		= 0x98,
	// ADC_DAP_ORT			= 0x9c,
};

enum
{
    ADC_CHANNEL_FMINL = 0,
    ADC_CHANNEL_FMINR,
    ADC_CHANNEL_LINL,
    // ADC_CHANNEL_MICIN,

    ADC_CHANNEL_COUNT
};

struct adc_f1c100s_pdata_t
{
    virtual_addr_t virt;
	char * clk;
	char * sclk;
	int reset;
};

static u32_t adc_f1c100s_read(struct adc_t *adc, int channel)
{
    struct adc_f1c100s_pdata_t *pdat = (struct adc_f1c100s_pdata_t *)adc->priv;

    // unmute channel.
    virtual_addr_t ADDR_MIXER_CTRL = pdat->virt + ADC_MIXER_CTRL;
    u32_t mixerReg = read32(ADDR_MIXER_CTRL) & ~(0x1f << 8);
	switch (channel) {
        case ADC_CHANNEL_FMINL:
            write32(ADDR_MIXER_CTRL, mixerReg | (1 << 12));
            break;
        case ADC_CHANNEL_FMINR:
            write32(ADDR_MIXER_CTRL, mixerReg | (1 << 11));
            break;
        case ADC_CHANNEL_LINL:
            write32(ADDR_MIXER_CTRL, mixerReg | (1 << 10));
            break;
        default:
            // mute all
            break;
    }

    const uint32_t WAIT_STABLE = 400;
    udelay(WAIT_STABLE);  // wait for internal filter to be stable

	// FIFO flush
	write32(pdat->virt + ADC_FIFOC, read32(pdat->virt + ADC_FIFOC) | (1 << 0));
	while (((read32(pdat->virt + ADC_FIFOS) >> 23) & 1) == 0) {}

    // by default, 0V = -24000 and VRA = 0.
    // make 0V = 0 and vreference = 65535.
	int val = (int16_t)(read32(pdat->virt + ADC_RXDATA) >> 16);
    val += 24000;
    if (val < 0) {
        val = 0;
    }
    return (u32_t)val;
}

static void adc_f1c100s_config(struct adc_t *adc)
{
	struct adc_f1c100s_pdata_t * pdat = (struct adc_f1c100s_pdata_t*)adc->priv;

	u32_t regVal = 
		(0u << 29)      // 48kHz,higher for better sampling speed
		| (1 << 28)     // digital enable
        | (0 << 24)     // mode 0
        | (0 << 17)     // delay after enable
        | (0 << 16)     // delay function
        | (0xf << 8)    // default
        | (1 << 7)      // mono
        | (0 << 6)      // 16-bit
        ;
    write32(pdat->virt + ADC_FIFOC, regVal);

    regVal = 
        (1u << 31)      // analog enable
        | (3 << 24)     // mic gain
        | (0 << 21)     // linein gain
        | (3 << 16)     // adc gain = 0
        | (1 << 14)     // COS slop time
        | (0 << 8)      // all mute
        | (1 << 7)      // PA speed fast
        | (4 << 0)      // default
        ;
    write32(pdat->virt + ADC_MIXER_CTRL, regVal);
}

static struct device_t * adc_f1c100s_probe(struct driver_t * drv, struct dtnode_t * n)
{
	struct adc_f1c100s_pdata_t * pdat;
	struct adc_t * adc;
	struct device_t * dev;
	virtual_addr_t virt = phys_to_virt(dt_read_address(n));
	char * clk = dt_read_string(n, "clock-name", NULL);
	char * sclk = dt_read_string(n, "sclk-name", NULL);

	pdat = malloc(sizeof(struct adc_f1c100s_pdata_t));
	if(!pdat)
		return FALSE;

	adc = malloc(sizeof(struct adc_t));
	if (!adc)
	{
		free(pdat);
		return FALSE;
	}

	clk_enable(clk);
	clk_enable(sclk);
	pdat->virt = virt;
	pdat->clk = strdup(clk);
	pdat->sclk = strdup(sclk);
	pdat->reset = dt_read_int(n, "reset", -1);

	adc->name = alloc_device_name(dt_read_name(n), -1);
	adc->vreference = dt_read_int(n, "vref", 2800000); // (AVCC * 1000000)
	adc->resolution = 16;
    adc->nchannel = ADC_CHANNEL_COUNT;
    adc->read = adc_f1c100s_read;
	adc->priv = pdat;

	if(pdat->reset >= 0)
		reset_deassert(pdat->reset);

    adc_f1c100s_config(adc);

	if (!register_adc(&dev, adc))
	{
		clk_disable(pdat->clk);
		free(pdat->clk);
		clk_disable(pdat->sclk);
		free(pdat->sclk);

		free_device_name(adc->name);
		free(adc->priv);
		free(adc);
		return NULL;
	}
	dev->driver = drv;

	return dev;
}

static void adc_f1c100s_remove(struct device_t * dev)
{
	struct adc_t * adc = (struct adc_t *)dev->priv;
	struct adc_f1c100s_pdata_t * pdat = (struct adc_f1c100s_pdata_t *)adc->priv;

	if(adc && unregister_adc(adc))
	{
		clk_disable(pdat->clk);
		free(pdat->clk);
		clk_disable(pdat->sclk);
		free(pdat->sclk);

		free_device_name(adc->name);
		free(adc->priv);
		free(adc);
	}
}

static void adc_f1c100s_suspend(struct device_t * dev)
{
}

static void adc_f1c100s_resume(struct device_t * dev)
{
}

static struct driver_t adc_f1c100s = {
	.name		= "adc-f1c100s",
	.probe		= adc_f1c100s_probe,
	.remove		= adc_f1c100s_remove,
	.suspend	= adc_f1c100s_suspend,
	.resume		= adc_f1c100s_resume,
};

static __init void adc_f1c100s_driver_init(void)
{
	register_driver(&adc_f1c100s);
}

static __exit void adc_f1c100s_driver_exit(void)
{
	unregister_driver(&adc_f1c100s);
}

driver_initcall(adc_f1c100s_driver_init);
driver_exitcall(adc_f1c100s_driver_exit);

设备树里加入:

	"clk-gate@0x01c20068": {"parent": "apb1", "name": "gate-bus-audiocodec", "shift": 0, "invert": false },
	"clk-gate@0x01c20140": {"parent": "pll-audio", "name": "gate-sclk-audiocodec", "shift": 31, "invert": false },
	"clk-link": { "parent": "gate-bus-audiocodec", "name": "link-adc" },
	"clk-link": { "parent": "gate-sclk-audiocodec", "name": "link-sclk-adc" },

	"adc-f1c100s@0x01c23c00": {
		"clock-name": "link-adc",
		"sclk-name": "link-sclk-adc",
		"reset": 64,
		"vref": 2800000
	},

#277 全志 SOC » F1C100s的reset引脚很敏感 » 2018-10-31 16:26:49

Quotation
回复: 1

自己的板子,reset引脚只上拉到3.3V,没有加电容到地。
调DAC功能时发现个奇怪的bug:每次按下某个按钮,DAC就没有信号了(0V),过大约1秒钟恢复到1.xV。但是这之后,DAC功能就失效了,没有任何音频输出。
调了大半天,发现是reset没有加电容引起的问题。调试时我是把reset引脚用长长的线接出来,按下按钮的信号竟然影响到另一根线上的reset。而且更诡异的是并没有让整个芯片复位,只是DAC功能失效了。

解决方法按照nano板子,加100nF到地就稳了。

#278 Re: 全志 SOC » V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久 (问题由 @Andy1234 解决,欢迎大家验证) » 2018-10-29 00:11:33

晕哥 说:

https://github.com/torvalds/linux/blob/master/sound/soc/sunxi/sun8i-codec-analog.c

我看了一下代码,
没有找到不关功放的寄存器,
或许找的姿势不对.

持续播放一段静音音频这个倒是可以有,
在应用程序端做就可以了。

貌似就是上边摘的那段代码,SUN8I_ADDA_PAEN_HP_CTRL_HPPAEN,耳机功放使能。
把 else if (SND_SOC_DAPM_EVENT_OFF(event)) 这段 和上面一句 msleep(700) 注释掉试试?

static int sun8i_headphone_amp_event(struct snd_soc_dapm_widget *w,
                     struct snd_kcontrol *k, int event)
{
    struct snd_soc_component *component = snd_soc_dapm_to_component(w->dapm);

    if (SND_SOC_DAPM_EVENT_ON(event)) {
        snd_soc_component_update_bits(component, SUN8I_ADDA_PAEN_HP_CTRL,
                          BIT(SUN8I_ADDA_PAEN_HP_CTRL_HPPAEN),
                          BIT(SUN8I_ADDA_PAEN_HP_CTRL_HPPAEN));
        /*
         * Need a delay to have the amplifier up. 700ms seems the best
         * compromise between the time to let the amplifier up and the
         * time not to feel this delay while playing a sound.
         */
        msleep(700);
    } else if (SND_SOC_DAPM_EVENT_OFF(event)) {
        snd_soc_component_update_bits(component, SUN8I_ADDA_PAEN_HP_CTRL,
                          BIT(SUN8I_ADDA_PAEN_HP_CTRL_HPPAEN),
                          0x0);
    }

    return 0;
}

#279 Re: 全志 SOC » V3s linux 4.13 音频播放延迟了,开始以为是线程同步问题,纠结了很久 (问题由 @Andy1234 解决,欢迎大家验证) » 2018-10-28 22:34:06

晕哥 说:
dbskcnc 说:
晕哥 说:

不知道是不是因为要省电,所以播放完之后关闭声卡???需要的时候再打开???
如果能一直开着,不知道能不能解决这个问题, 我们的产品是市电供电,不需要节电.

能不能验证下这个问题,如果每次播放都要延时700ms, 真的很大问题, 按理不应该这样子才对

验证过了, 如果每次播放间隔时间超过3秒(目测), 那么每次都是延迟 700ms.
上面是 linux4.13的结果,
不知道用bsp linux(3.4) 会不会这样.

芯片内部功放启动的时候会相当于把音量“慢慢”调大,避免电平突然改变造成的咔嗒声。所以这个现象应该是驱动层把功放关闭了,再次启用的时候比较慢。
可以改驱动,一直不关闭功放。
或者,在播放完的时候,持续播放一段静音音频。

#280 Re: 全志 SOC » 荔枝派nano f1c100s 开发板入坑记录 » 2018-10-28 22:26:47

没事逛荡 说:

大神,我在编译rtthread引导是,提示编译依赖 arm-eabi-gcc,这个用的哪个工具?Mac没找到相应版本呢

我在Mac下用arm-non-eabi-gcc,Arm官方发的版本。不过是用xboot,没用rtthread。

#281 Re: 全志 SOC » F1C100s启动时搜索SPI Flash的顺序? » 2018-10-21 23:40:53

lilo 说:
Quotation 说:

嗯……V3s只有一组SPI0(PC0~PC3),所以猜测F1C100s也是只能用这一组吧。还有一个证据是这组的SPI0_CS默认是pull-up,另一组的默认是Z。

端口默认pull-up 与 Z有什么区别?会有什么结果?

区别是,上电后没有执行程序的时候,IO口的状态是上拉还是高阻态。
只是个猜测,因为绝大多数IO口的默认状态都是Z,那个SPI0_CS是特殊的,所以猜测Flash只能接在那上面。

#282 Re: 全志 SOC » 请教关于荔枝派zero/nano 开发板串口线不拔出就无法重启问题 » 2018-10-21 23:37:18

Nano有引出reset啊,我把reset和Flash CS引脚接出来,用两个按钮控制,方便的很。

#283 Re: 全志 SOC » F1C100s启动时搜索SPI Flash的顺序? » 2018-10-15 14:18:31

嗯……V3s只有一组SPI0(PC0~PC3),所以猜测F1C100s也是只能用这一组吧。还有一个证据是这组的SPI0_CS默认是pull-up,另一组的默认是Z。

#284 Re: 全志 SOC » F1C100s启动时搜索SPI Flash的顺序? » 2018-10-15 14:15:28

谢谢,文档还是没说用那组SPI0啊(有两组:PC0~3和PD18~21)。板子可用空间有点小,如果两组都会搜索,那会更灵活。

#285 Re: 全志 SOC » 小容量的TF卡,有没有质量好的供货渠道? » 2018-10-15 14:10:14

小容量TF卡,绝对没有可靠的,血的教训……
正规大厂在产的最小容量也是8G了,再小的容量都是没牌子的,质量特别不可靠。8G的Sandisk是我们用下来最便宜又有保障的了。

#286 全志 SOC » F1C100s启动时搜索SPI Flash的顺序? » 2018-10-14 00:20:15

Quotation
回复: 6

F1C100s启动时,BROM只会检测固定引脚上的SPI Flash吗?还是把SPI0(2组)+SPI1(1组)都搜一遍呢?

#287 Re: 全志 SOC » F1C100s有没有唯一的ID之类的? » 2018-10-12 14:51:05

晕哥 说:

f1c100s 应该是没有 UID, 如果系统用 spi nor flash(比如w25qxxx) 可以从这里获取到UID.

太好了,我用的Flash是有的。谢谢。

#288 全志 SOC » F1C100s有没有唯一的ID之类的? » 2018-10-12 00:21:35

Quotation
回复: 12

有没有像STM32那样的unique ID,全球唯一的ID?

#289 Re: 全志 SOC » 又收了一台唱戏机, 再拆全志唱戏机,看戏机(固件已经读出, 退休不怕孤单了). » 2018-10-11 15:31:43

tugouxp 说:

这种廉价产品用的电池有没有什么讲究?18650应该比一般的方形软包电池好一些吧,软包电池的电极位置都不是标准的,18650起码一致性做的非常好, 这里竟然用18650.

软包电池一般找厂家定制的,电池尺寸、容量、接线等等都可以定制,也可以直接拿厂家现有的型号用。
18650比软包便宜,安全性差一点。

#290 全志 SOC » 贡献个F1C100s ADC驱动(for XBOOT) » 2018-10-10 14:30:18

Quotation
回复: 11

F1C100s没有通用的ADC,所以用音频ADC撸了个通用ADC的驱动。
支持3路channel,分别对应FMINL,FMINR,LINL引脚。只支持单次采样,不是用来录制音频的。产品里需要电量检测什么的可以用。

下载代码:adc-f1c100s.c,添加到mach-f1c100s/driver;

再在设备树添加:

"clk-gate@0x01c20068": {"parent": "apb1", "name": "gate-bus-audiocodec", "shift": 0, "invert": false },
"clk-setting@0": {"clocks": [{"name": "gate-bus-audiocodec", "enable": true}]},
"clk-gate@0x01c20140": {"parent": "pll-audio", "name": "gate-sclk-audiocodec", "shift": 31, "invert": false },
"clk-link": { "parent": "gate-sclk-audiocodec", "name": "link-audiocodec" },

"adc-f1c100s@0x01c23c00": {
    "clock-name": "link-audiocodec",
    "reset": 64
},

#291 全志 SOC » F1C100s的ADC和模拟参考电压关系 » 2018-10-10 13:28:46

Quotation
回复: 13

手册上只说了VRA1/VRA2引脚是模拟参考电压,没有详细解释。实际测试如下:
荔枝派Nano,AVCC=3.0V,VRA=1.1V;
我的板子,AVCC=2.81V,VRA=1.03V;
1.1/3.0≈1.03/2.81,比例基本一致。

LINEIN、FMINL、FMINR这几个模拟输入经过mixer,由ADC采集。
实测,模拟输入允许的电压范围为0~VRA*2,输出值以VRA为中心,正负约24000。
所以,VRA是这么算出来的:令AVCC映射到65535,则24000对应的电压值为VRA=AVCC*24000/65535。代入检验,符合实际测试值。

#292 Re: 全志 SOC » F1C100S裸奔framebuffer+PWM+GPIO驱动 » 2018-10-04 22:59:12

daydayup 说:

厉害厉害,能不能分享一下?

开新帖分享了裁剪方法,把XBOOT优化到<170kB了。https://whycan.cn/t_1708.html

#293 全志 SOC » XBOOT尺寸裁剪(170kB不带图形系统) » 2018-10-04 22:56:32

Quotation
回复: 33

原文发表于个人Blog http://quotation.github.io/development/2018/10/04/xboot-tailoring.html

硬件平台:全志F1C100s
系统:XBOOT
工具链:gcc-arm-none-eabi

XBOOT默认的配置带了很多功能,编译后的尺寸颇大,影响启动时间。因为XBOOT启动过程的大部分时间是花在从Flash拷贝代码到RAM,所以只要能把编译结果的尺寸降下来,就可以成比例地加快启动速度。
在对XBOOT做裁剪优化后,编译后的尺寸从默认的4MB降至<170kB(不带图形系统和Lua,带文件系统),启动速度完全满足要求。

裁剪

未优化前,默认编译结果xboot.bin尺寸为4MB。
以下的裁剪措施分若干个步骤,可根据自己的需要的功能,只采取部分步骤。

优化步骤:
1. 去除不用的资源文件,尺寸减到3.3MB。XBOOT带了字体、图片、示例Lua脚本等资源文件,如果完全用不着图形界面,直接删掉。(如果应用中确实需要用到大量资源,参见本文最后给出的优化方法。)
步骤:
* 删除src/romdisk目录;
* 修改src/Makefile,去除“$(CP) romdisk .obj”这行,但是保留arch/下的romdisk。

2. 去除Lua框架,尺寸减到3MB。快速开发点简单的东西用Lua比较方便,由于我们的产品是用C/C++开发,所以Lua完全用不着。
步骤:
* 修改src/Makefile,去除所有lua、framework相关的行;
* 编译一下,根据编译错误,删除代码里相关的引用。

3. 去除图形库,尺寸减到403kB。图形图像相关的库比较多,可根据需要裁剪。很多应用场景不需要矢量图形、矢量字体,只需要libpng再加上位图字库就够用。
步骤:
* 修改src/Makefile,去除zlib、libpng、pixman、cairo、freetype、chipmunk相关的行;
* 编译一下,根据编译错误删除代码里引用到图形库的地方(比如do_showlogo)。

4. 去除shell、command功能,尺寸减到371kB。开发、调试时可以用用shell,正式产品不需要保留。
步骤:
* 修改src/Makefile,去除shell、command;
* 删除src/arch/arm32/lib/cpu/cmd-*.c,或移到另外的目录里;
* 删除掉main()中的do_showlogo、do_autoboot、run_shell调用,改为直接调用实际的应用代码入口;
* 编译一下,根据编译错误删除代码里几处引用到system()的地方。

5. 去除不用的驱动,尺寸减到308kB。根据自己的应用需求,删除不必要的驱动。
步骤:
* 修改src/Makefile,去除用不到的driver/xxx,我这里只保留了block、时钟、console、dma、gpio、i2c、interrupt、pwm、reset、spi、uart、watchdog等常用外设驱动;
* 删除mach-f1c100s/driver里不用的驱动,或移到单独的目录里。

6. 去除不用的库,尺寸减到277kB。
步骤:
* 修改src/Makefile,去除libc/charset、libc/crypto、fs/xfs(视自己的需要删除);
* 删除代码里引用到的地方。

7. 链接时去除未用到的符号,尺寸减到170kB。XBOOT自带的libc和libm函数都通过EXPORT_SYMBOL宏加到了.ksymtab.text段,所以即使在代码中没有调用到,链接时也无法优化掉,白白占用空间。这个设计本意是为了编译动态链接库,不过在当前的XBOOT中并没有使用。
步骤:
* 修改module.h,把EXPORT_SYMBOL宏定义为空,即:#define EXPORT_SYMBOL(symbol);
* 修改mach-f1c100s/xboot.mk,给LDFLAGS增加“-Wl,--gc-sections”,给MCFLAGS增加“-ffunction-sections -fdata-sections”,让链接器删除未用到的符号。

8. 去除文件系统。鉴于这个改动涉及很多零散的点,且大多数应用都会需要文件系统,所以不建议这样改。如果实在有必要,可以把所有的fs和block驱动去掉,尺寸减到131kB

以上为功能裁剪和链接优化方法。

资源打包

如果程序中需要用到大量资源,资源文件默认是放在romdisk中,会增加启动时间。一个可采取的优化措施是,把非必要的资源单独放在另一个romdisk中,在启动后异步加载。(还未实际验证过)

先分析XBOOT的代码,和romdisk相关的有如下几处:
* src/Makefile最后,sinclude这句,把源码的某个目录拷贝到.obj中,用cpio命令把目录打包成单个文件;
* driver/block/romdisk/data.S和mach-f1c100s/xboot.ld,把打包后的romdisk文件链接到单独的“.romdisk”段;
* 启动时,sys_copyself中把__image_start和__image_end两个符号之间的内容拷贝到RAM,如上所说.romdisk段也在此范围内;
* subsys_init_romdisk中,用__romdisk_start和__romdisk_end符号之间的内存创建romdisk,并在subsys_init_rootfs中挂载到“/”。

因此,优化方法是,将非必须(启动不需要)的资源文件打包到另一个romdisk,挂载到单独的目录下使用。大致做法如下:
* 启动过程中必须的资源仍然放在默认romdisk中;
* 启动非必须的资源单独放到一个源码目录,通过Makefile cpio打包成单个文件;
* xboot.ld中添加“.dataromdisk”段,参照XBOOT的做法,用一个.S文件把上一步的打包文件链接到.dataromdisk段;该段位于.data段之后,因此启动的时候不会被sys_copyself拷贝;
* 系统启动之后,参照sys_copyself的方法,把.dataromdisk段拷到RAM;
* 按照subsys_init_romdisk和subsys_init_rootfs的做法,初始化另一个romdisk,挂载到“/data”。

#294 Re: 全志 SOC » F1C100S裸奔framebuffer+PWM+GPIO驱动 » 2018-10-04 02:19:28

达克罗德 说:

目前我把xboot优化到1.3MB大小(带文件系统和图形库),启动到logo只需要0.85s(F1C100S),基本满足需要。V3S没测,上电应该更快。如果V3S和F1C100S支持QSPI就完美了。。。

我这里不带文件系统和图形库,只保留要用的功能和驱动,xboot可优化到240kB。很实用了。

对于很多应用,数据文件应该占ROM空间很大一部分。xboot把数据文件打包放在romdisk里,也会占用启动拷贝Flash的时间。这部分是可以优化成在启动之后做的。

#295 Re: 全志 SOC » 有没有朋友用过 【SD 接口的 NAND】,可以用在全志soc上 » 2018-10-04 01:46:41

晕哥 说:

应该是这个型号: XTSD01GLGEAG

目前不知道稳定性如何,节后拿几个样品试一试。

他们业务员说大量用在故事机,佛经机.

http://www.xtxtech.com/en/products.asp?sid=62

看起来不错。我们有个产品用TF卡,一直想找能直接SMT的TF卡替代品。SPI Flash不够大,这个最大到1GByte,很好了。

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn