您尚未登录。

#2 DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » Linux 开发板选择。 » 2024-10-12 10:06:01

shiinakaze
回复: 1

请问对个人开发者来说,哪种 SoC 的资料比较全,并且一直在更新?
我看了 Luckfox 和 Milkv 貌似都还行,但是 Luckfox 用的 RV1106 资料貌似还是差一点儿,原厂的 SDK 也没给。

#3 DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » PC 显示器的驱动芯片 » 2024-10-10 15:56:45

shiinakaze
回复: 1

我发现市面上 PC 显示器的驱动芯片信息非常少,datasheet 完全没有,更别提 TRM,那么 Linux 发行版是怎么写驱动的?
贴一个 LCD driver 网站:
https://www.lcdfans.com/category/article

#4 Re: 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 关于 FreeRTOS 中 delay 函数的问题 » 2024-10-04 14:09:31

海石生风 说:

RTOS使用systick溢出中断的分辨率是毫秒,其计数器VAL的分辨率小于微秒。两者结合可以得到微秒分辨率的计时

好的,谢谢大佬指点。

#5 Re: DIY/综合/Arduino/写字机/3D打印机/智能小车/平衡车/四轴飞行/MQTT/物联网 » 是否能把手机的摄像头模组利用起来 » 2024-10-03 12:32:43

shiinakaze 说:

只需要搞到模块的原理图和图像传感器的 TRM 就行,剩下的就是写驱动。

当然,写驱动时,对于图像传感器的配置也是个问题,一般厂商会给一个 application note,里面有写好的配置参数,不然一个一个寄存器配简直噩梦。

#6 Cortex M0/M3/M4/M7 » STM32F103 驱动 OV2640 图像传感器 » 2024-10-03 12:25:23

shiinakaze
回复: 0

采用了 STM32F103C8T6 核心板和 OV2640 图像传感器模块。
效果:
dbe4bea16c4a248f80d2ea1a7b9aff1e.png

部分时序图:
6af9389b98e32542d60d928b73553ee2.png

开发中遇到的坑

1.SCCB 模拟:SCCB 是 I2C-bus 的改版,主要是 OV2640 模块没有上拉电阻,无法采用开漏输出。
2.并行接口的模拟:如果使用 IO 模拟的话,只能达到 1 FPS,但是使用了 Timer 和 DMA,就可以达到 1.5-2 FPS。

项目链接:https://github.com/ShiinaKaze/STM32F1_OV2640

#8 Cortex M0/M3/M4/M7 » SHT30 温湿度传感器驱动(软件 I2C 实现) » 2024-10-03 12:15:46

shiinakaze
回复: 0

Sensirion 的传感器在很多产品能见到,比如小米的温度计,本人通过软件 I2C 实现了其驱动,当然,只是部分功能,因为该传感器有不同模式,因为懒所以没写。
该驱动通过 macro 来定义 GPIO 操作,方便快速移植。

修改下面四个 marco 即可:

#define SW_I2C_Delay() Delay_us(5)
#define SW_I2C_SCL_WriteBit(BitVal) GPIO_WriteBit(SW_I2C_GPIOx, SW_I2C_SCL_PIN, (BitAction)BitVal)
#define SW_I2C_SDA_WriteBit(BitVal) GPIO_WriteBit(SW_I2C_GPIOx, SW_I2C_SDA_PIN, (BitAction)BitVal)
#define SW_I2C_SDA_ReadBit() GPIO_ReadInputDataBit(SW_I2C_GPIOx, SW_I2C_SDA_PIN)

sht30_driver.zip

#9 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » CPU,SoC,微处理器等相关术语混用问题(表格解释) » 2024-10-03 11:33:43

shiinakaze
回复: 0

中央处理单元(central processing unit)是计算机架构中的一个抽象元素,它可以使用不同的集成电路来实现。所以 CPU 在描述计算机系统时用的非常宽泛。
描述系统采用后缀添加 unit 的方式,例如 microcontroller unit 即 MCU
描述单个集成电路(Integrated circuit)则采用微处理器(microprocessor)和微控制器(microcontroller)等名称。按照集成度可查看以下表格:

cpu_mcu_soc.png

参考:
[1]: https://en.wikipedia.org/wiki/Microprocessor
[2]: https://www.computerhistory.org/
[3]: https://www.sciencedirect.com/topics/computer-science/microprocessor
[4]: https://www.sciencedirect.com/topics/engineering/microcontroller

#10 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 处理器的发展简史 » 2024-10-01 19:56:13

shiinakaze
回复: 0

最开始 CPU 没用 MOS 技术,直接拿电阻器或真空管搭的,例如 IBM System 704,也就在这时提出了 CPU 这个概念。这个可以在 IBM 704 的手册找到:
704 electronic data-processing machine - manual of operation
IBM 704 at NACA
由于 MOS 技术的快速发展 Viatron Computer Systems 公司在 1968 年把用于处理数据的 IC 称为微处理器(microprocessor),而第一个使用 MOS/LSI 技术的 CPU 在 F-14 战斗机的 CADC 中的 MP944 chipset 中,于 1970 年诞生,但是由于保密,鲜为人知。Intel 在 1971 年推出了第一个商用微处理器 Intel 4004
The ceramic C4004 variant without gray traces
至此微处理器被定义:把 CPU 集成到一块集成电路(芯片)上,称为微处理器

1974 年德州仪器(Texas Instruments)推出了 TMS 1000NC,从它的 datasheet 可以看到被称为 “one-chip microcomputer”,它将 CPU,RAM,ROM,I/O 设备集成到了 IC 上
TMS 1000NLL
日本在 1970-1980 大力发展半导体,4-bit 和 8-bit microcomputer 层出不穷,根据当时的产品 datasheet,可以看到 "single-chip microcomputer",加上日本电子商品大量流入国内,这可能是单芯片微型计算机,即单片机一词的来源
再后来,就是 Intel 8048 (MCS-48 family) 的兴起和 Intel 8051 (MCS-51 family),Intel 8048 的 datasheet 已经正式给这种设备命名,即微控制器(Microcontroller)

第一个 SoC (system-on-chip) 为 Intel 5810,于 1974 年被应用于 Microma 手表上,它除了集成计算机基本组件,还集成了 LCD 驱动器和定时器
1974-2-2.jpg
随着 MOS 技术的继续发展,更多组件集成到了 IC 上,包括 GPU,ISP,DSP 等,而且不同厂商对于 SoC 的称呼都有不同,例如 Qualcomm 称自己的 SoC 为 platform,Arm 和 NXP 则称为 application processor

#11 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » CPU,MCU,SoC 的术语使用混乱问题 » 2024-10-01 18:36:58

@shiinakaze
补充和强调:
Qualcomm 对自己的 SoC 有不同的称呼即 platform。

#12 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » CPU,MCU,SoC 的术语使用混乱问题 » 2024-10-01 18:23:14

海石生风 说:
shiinakaze 说:

@海石生风
如果你连基本概念都分不清,确实对你来说是废话。

platform和SoC你倒是分清概念呀,无非嘴硬。懒得鸟了,浪费时间。

文章不是写了?你自己分不清说我嘴硬就有点搞笑了。链接:Wikipedia - Qualcomm Snapdragon

Snapdragon is a suite of system-on-chip (SoC) semiconductor products for mobile devices designed and marketed by Qualcomm Technologies Inc. The Snapdragon's central processing unit (CPU) uses the ARM architecture. As such, Qualcomm often refers to the Snapdragon as a "mobile platform". Snapdragon semiconductors are embedded in devices of various systems, including vehicles, Android, Windows Phone and netbooks.[1] In addition to the processors, the Snapdragon line includes modems, Wi-Fi chips and mobile charging products.

#13 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » CPU,MCU,SoC 的术语使用混乱问题 » 2024-10-01 12:47:40

@海石生风
如果你连基本概念都分不清,确实对你来说是废话。

#14 计算机图形/GUI/RTOS/FileSystem/OpenGL/DirectX/SDL2 » 关于 FreeRTOS 中 delay 函数的问题 » 2024-10-01 10:54:42

shiinakaze
回复: 3
1.Delay

我在裸机上使用的 Delay 是用 systick timer 实现的

/**
 * @brief  Microsecond delay
 * @param  us specifies the delay time length, in microseconds.
 * @retval None
 */
void Delay_us(uint32_t us)
{
	if (us > 0)
	{
		SysTick->LOAD = SYSTICK_LOAD * us;	  // Set systick reload value
		SysTick->VAL = 0x00;				  // Set SysTick Current Value to 0
		SysTick->CTRL = 0x00000005;			  // Set SysTick clock source to use processor clock and enable timer
		while (!(SysTick->CTRL & 0x00010000)) // Wait for the timer to count to 0
		{
		}
		//		SysTick->CTRL = 0x00000004; // Disable timer
	}
}

所以会和 FreeRTOS 产生冲突,所以采用了 TIM2:

void Delay_Init(void)
{
	TIM_TimeBaseInitTypeDef TIM_TimeBaseInitStructure;
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2, ENABLE);

	TIM_TimeBaseInitStructure.TIM_Prescaler = 72 - 1;
	TIM_TimeBaseInitStructure.TIM_Period = 1;
	TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Down;
	TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	TIM_TimeBaseInit(TIM2, &TIM_TimeBaseInitStructure);
}

/**
 * @brief  Microsecond delay
 * @param  us specifies the delay time length, in microseconds.
 * @retval None
 */
void Delay_us(uint32_t us)
{
	if (us > 0)
	{
		TIM2->CNT = us - 1;		  // 向计数器装要递减的数,减到0后会触发定时器的TIM_FLAG_UpDate标志位
		TIM2->CR1 |= TIM_CR1_CEN; // 使能计数器, 计数器开始递减
		while ((TIM2->SR & TIM_FLAG_Update) != SET)
		{
			// 等到计数器减到0
		}
		TIM2->CR1 &= (~TIM_CR1_CEN);	// 关闭计数器
		TIM2->SR &= (~TIM_FLAG_Update); // 清除定时器变为0的标志位
	}
}

请问还有其他方法么?比如还是利用 SysTick 来delay,只读不修改。

2.任务
  • 创建任务时,usStackDepth 最好设置大一点儿,例如 128

  • 如果你使用任何通信,请把通信函数添加到 `portENTER_CRITICAL()` 和 `portEXIT_CRITICAL()` 之间,这是为了确保时间片结束不会被打断通信

void vSHT30Task(void *pvParameters)
{
    SHT30_TypeDef sht30 = {0};
    for (;;)
    {
        portENTER_CRITICAL();
        SHT30_Measure_Periodic_Mode(&sht30);
        OLED_ShowNum(3, 1, sht30.temp, 4);
        OLED_ShowNum(4, 1, sht30.hum, 4);
        printf("sht30_task:%f\n", sht30.hum);
        portEXIT_CRITICAL();
        vTaskDelay(1000);
    }
}

p.s. 为什么论坛不支持 markdown 呢,写文章好麻烦。

#15 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » CPU,MCU,SoC 的术语使用混乱问题 » 2024-10-01 10:11:18

@海石生风
这不就是我文章里面已经提到的东西么,还有严格来说 CPU 只是一个计算机架构中的一个抽象模型,并不是一个实际物体,文章的所有内容来自论文和 wikipedia 的说明,并非我自顾自的意想。

#16 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » CPU,MCU,SoC 的术语使用混乱问题 » 2024-09-30 14:54:52

@海石生风
不乱吧,只是根据学术界和工业界的术语解释来的。

#17 Re: 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » CPU,MCU,SoC 的术语使用混乱问题 » 2024-09-30 14:53:07

根据 arm 的教育书籍 Fundamentals of System-on-Chip Design on Arm Cortex-M Microcontrollers

在术语方面,值得重申的是,CPU 是用于通用应用程序的单个处理器核心。它不能自己操作,因为它需要输入、输出和外设,而且必须有与它相关联的存储器才能运行。在微控制器单元(MCU)和 SoC 的定义之间产生混淆。一般来说,MCU 由 CPU、Memory(RAM、ROM)、外设组成,用于基本控制应用。SoC 则被认为更复杂,因为它可以包括 GPU、DSP、图像处理器等元素,并且从 Memory 和外设的角度来看,SoC 要大得多。

#18 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » 微控制器通用应用开发教程 » 2024-09-26 17:13:04

shiinakaze
回复: 1

嵌入式系统(embedded system)中常用 microcontroller,所以 microcontroller 在嵌入式系统中称为 MCU (microcontroller unit)。

Development resource

MCU 开发一般指应用开发(application development),比如操作 MCU 外设(GPIO,I2C,SPI 等)。
一般 MCU 开发资源包括 3 个方面:Development Software, Development Tool, Development Document
Development Software
Development Software 一般包含 Software Interface 和 Driver Library,Software Interface 定义了各个 Register,Driver Library 则在 Software Interface 基础上,封装了 MCU peripheral 的基本 Function。
以 STM32 为例:
Software Interface (CMSIS)
software_interface.png

Driver Library (STM32 standard peripheral library)
driver_library.png

Development Tool
一般是配合开发的工具软件,例如 IDE,Development Toolchain (compiler, stdlib),Development Kit,只需了解如何使用即可,参考用户手册。
Development Document
供开发者查询的文档,比如 Datasheet,User Manual,Reference Manual(or Product Specification),Application Note 等。

Development step

在开发一款 MCU 时,需要按照以下步骤进行:
1.首先,查阅 MCU 的 Datasheet 或 Product Specification,它提供了MCU的概览和架构图,这是理解MCU结构的基础。Datasheet 还会详细说明 memory map,general register、peripheral register、ROM、RAM 的地址分配情况。
2.接着,粗略查看 Reference Manual,这个文档详细描述了各个 peripheral register 的功能和地址,并且说明了 peripheral register 如何控制 peripheral 工作。
3.最后,阅读 User Manual,这些手册通常包含有关 Driver library 的文档,介绍 Driver library 的使用方法、各个函数的信息,以及如何调用这些函数。User Manual 可能包含示例代码,帮助你理解如何实际应用这些函数。

Development process

由你编写的 Application Code 将和 MCU Library、Software Interface 一起,被工具链编译成可执行文件(一般格式为 ELF),然后通过 Debugger 下载到 MCU 中。
mcu_development_process.jpg

#20 技术人生/软件使用技巧/破解经验/技术吐槽/灌水 » CPU,MCU,SoC 的术语使用混乱问题 » 2024-09-21 15:08:20

shiinakaze
回复: 12

最开始 CPU 没用 MOS 技术,直接拿电阻器或真空管搭的,例如 IBM System/360,当然,CPU 也是 IBM 提出的。
然后第一个使用 MOS/LSI 技术的 CPU,即把 CPU 集成到一块集成电路(芯片)上,称为微处理器(microprocessor),在系统里称为 MPU (microprocessor unit),毕竟系统由单元构成嘛。

随着集成度的提高,TI 的工程师又把外设、RAM、ROM 也集成了进去,称为微控制器(microcontroller),在嵌入式系统里称为 MCU。

再随着集成化提高,媒体(音频和视频)模块,GPU 也被集成了进去,这称为片上系统(system-on-chip, SoC),这个在系统里叫什么没有定,但是面向消费者一般称为 CPU。

所以你可以在这里发现,如果相对于整个系统来说,一般是称 XXU,而单独描述这个设备,则称为 microprocessor,microcontroller,SoC,processor,platform。

不同厂商称自己的 IC 都有不同:
Intel: processor
Qualcomm: platform
海思和全志: SoC

比如 PC 的 CPU 一般为 Intel processor,移动电话机的 CPU 一般为 snapdragon platform 或 Kirin SoC。

至于为什么市面上只使用了 CPU,那是因为为了方便顾客购买,顾客不需要了解这么多知识,直接命名 CPU 省事儿。

但从专业角度来讲,看你是在描述整个系统,还是在描述单个集成电路
System : CPU,MPU,MCU
Integrated circuit: microprocessor,microcontroller,SoC,processor,platform

页脚

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

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