硬件交互问题与解决方案

23日我们成功取得了Uniflash的python bootloader PC端交互代码;此外成功抓取了uniflash与毫米波传感器上串口通信的Cortex-r4的uart包;

目前,就mcu之间的交互来说需要处理的问题为:

  • 4g模块向MCU发送指令,MCU对指令做出响应(指令系统)
  • 4g 模块通过UART将数据烧写至MCU片上flash(通过串口烧写到外置flash)
  • 接收到命令的MCU通过GPIO和reset,将IWR模组调为Flashing mode;
  • MCU通过调用我们包装好的模拟UNIFLASH烧录的api来将FLASH中的镜像发送到IWR的片上内存;在烧录完成后自动跳针重启上电;
  • MCU与IWR之间保持两条串口连接,数据通过UART发送给4G模块,从而实现远程获取数据与远程控制(封装uart包,确定与服务器之间的交互包的格式)

[持续更新]mmWave Develop Journal

Contributors: Frank.L (Liang) & Locus (Zhu)

Schedules:

  • Phase [1-1]: 阅读Ti 烧录Python源码并移植为C语言 (Locus)
  • Phase [1-2]: 学习STM32F103X HAL Library并掌握UART通信编程方法(Frank.L)
  • Phase [2-1]: C代码 dummy串口测试通过 (Locus)
  • Phase [2-2]: 实现STM32UART通信并实现STM32<->板载flash烧写 (Frank.L)
  • Phase [3]: 实现STM32上位机对IWR6843下位机flash烧写 (Frank.L & Locus)
  • Phase [4]: 加入4G模块测试,系统联调 (Frank.L & Locus)

04.23 Locus:

Phase[1-1],更新两文档 IWR6843Python源码详解规范,约定及参数

04.23 Frank.L:

Phase[1-2] 更新一文档 硬件交互问题与解决办法(持续更新)

04.24 Locus:

Phase[1-1],基本理清TX过程(今天基本摸了)Phase[1-1]剩余:Receice包、Read ACK报文、其他函数,以及烧入image前处理,今日未更新文档。

计划04.25完成Phase[1-1],Phase[2]

04.25 Locus:

Phase[1-1] & Phase [2], 学习C++ 串口通信 via Windows;移植串口通信代码、烧写代码和镜像文件处理代码到C++(45%);今日未更新文档

04.25 Frank.L:

Phase[2], 实现了一个简单的UART命令系统;初步掌握如何利用串口烧写img到片上flash的HAL库命令;今日未更新文档

04.27 Lucus:

Phase[2],上位机代码基本完成,转入Phase[2]测试阶段

4.27 Frank.L

Phase[2], 已在自购stm32f104板子上实现了UART向SPI flash写入读取功能

5.2

上位机烧写代码过编,转入Phase[3]系统联调阶段

5.5 Frank.L

调了三天,主要解决几个串口之间的交互,GPIO,还有UART2向IWR发出break信号;但是现在这几个都还有一些bug(UART2发送了break信号,但是IWR并没有进入命令模式;UART1与UART2交互会出现一些玄学问题;)

[持续更新]Ti IWR6843 image烧入过程Python源码

download_file函数:控制整个image通过串口烧入IWR6843的过程

_comm_open函数:调用.net Framework库函数,打开串口

_send_start函数:做一个open command指令的data包,告诉IWR6843该传包了

_send_command函数:把上层传来的data发走,并接收ack来确定data是否被正确收到

真正把data包打包完整,并加载到串口上的函数;通用的传包函数,可以发open command,write to SRAM和write to flash三种指令

注意!区分三种不同指令的操作数应该调用本函数的函数中封装到data里,本函数并不关系具体是三种指令的哪一种 仅计算校验、文件大小和加上起始同步0xAA操作数

[持续更新]约定、规范、基础参数

阅读Uniflash Python Support源码

Tx流程:1.读取image -> 2.分封包 -> 3.计算校验、封装 -> 4.经过串口传送

Rx流程:

其中是用高级语言python处理的部分为1-3,4通过调用.Net Framework 库函数实现。

几个重要的指令ID以及其在Python中的封装方式:

其中 struct.pack()struct module 中封装方式,“B”为转换格式,将其转换为unsigned char型占一个byte,因为后面也要使用不同指令调用pack()方法封装不同数据,现将完整参数列表列在下面:

词典型参数列表Storage表示我们要把包向IWR6843的那个存储器传(SDRAM,FLASH,SFLASH等)这部分定义同样参照TI文档:

现在按照顺序说明python support执行烧入image的流程:

2020.04.23 10:13PM

激光的产生原理 -原子跃迁的爱因斯坦理论

这几天在做激光相关的仿真,就从头学了一下激光原理,参考了固体激光原理和厦门大学的MOOC,整理了一下相关的知识要点,个人计划是把相关的推导都梳理一遍,整组博文更新时间可能较长。下面是第一部分,激光的产生原理相关的内容。

一.原子跃迁的爱因斯坦理论

根据量子理论,原子的能级是分立的,我们首先考虑最简单的情况,一堆具有两个能级的相同原子,表示为E1,E2E_1,E_2,相应单位体积内处于两能级的原子数分别为N1,N2N_1,N_2E2E_2能级与E1E_1能级的能量差为hνh\nu

E2E1=hν(1)E_2-E_1 = h\nu\tag 1

假设这堆原子都处在一个封闭的系统中,那么无论原子的能级变化,处于两个能级间的原子的数量之和应该是不变的

N1+N2=Ntotal(2)N_1+N_2=N_{total}\tag 2

爱因斯坦考虑原子相互作用的量子理论并考虑辐射的观点,指出这种相互作用应该包含原子的自发跃迁受激辐射跃迁受激吸收跃迁三个过程,并提出与之对应的爱因斯坦系数A21,B12B21A_{21},B_{12}和B_{21} Alt

1.1自发跃迁

自发跃迁是高能级的原子自发的向低能级跃迁,这个过程依赖的是原子的固有属性,和原子所处的辐射场无关。

我们定义自发跃迁的概率A21A_{21}为单位时间、单位体积中出于高能级的N2N_2个原子中,自发跃迁的原子与N2N_2的比值

A21=(dN21dt)sp1N2(3)A_{21} = (\frac{dN_{21}}{dt})_{sp}\frac{1}{N_2}\tag 3

sp表示自发(spontaneous){sp}表示自发 (spontaneous)

其中(dN21)sp(dN_{21})_{sp}是单位体积内,在时间元dtdt由于自发跃迁引起的,由高能级向低能级跃迁的原子数。

如果我们认为,导致高能级原子数量变化的原因只有自发跃迁,那么单位时间,单位体积内,高能级减少的粒子数为:

dN2dt=dN21dt(4)\frac{dN_2}{dt}=-\frac{dN_{21}}{dt} \tag 4

自发跃迁的速率与上能级E2E_2的粒子数N2N_2成正比:

(3)(4)(3)(4)两式,可得:

dN2dt=A21N2(5)\frac{dN_2}{dt} = -A_{21}N_2 \tag 5

自发跃迁是一个空间与时间的统计函数,对于大量的受激原子,各个发射过程之间没有相位关系,发射的量子也是不相干的。

解方程(5)(5),可得解

N2(t)=N2(0)exp{tA21}(6)N_2(t) = N_2(0)exp\{-tA_{21}\}\tag 6

我们也可以用受激态电子的平均寿命,来表征自发跃迁,能级E2E_2的自发辐射寿命τ21\tau_{21}为自发跃迁的爱因斯坦系数A21A_{21}的倒数:

τ21=A211(7)\tau_{21} = A_{21}^{-1} \tag 7

至于为什么是倒数关系,我并不是很清楚,许多课本中也没给出明确的解释,个人猜测是统计力学得到的结果,等补完统计力学的内容以后可能会再更新该部分内容

1.2 受激吸收跃迁

爱因斯坦认为必然存在原子在辐射场作用下受激跃迁的过程,(注意受激跃迁包括了受激发射和受激吸收两个过程)因为如果黑体原子和辐射场相互作用只有上述过程,显然腔内辐射场不稳定(个人理解是只出不进?待稍后查阅一些物理性更强的激光教材) 处于能级E1E_1的原子,在辐射场的激励下,吸收一个光子,向E2E_2跃迁,这叫做受激吸收跃迁,其概率可以用W12W_{12}表示,注意,若设两能级间的能隙为hν21h\nu_{21},则以下公式中的频率的能量密度ρν\rho_{\nu}限定为ν21\nu_{21},与其他频率无关。

W12=(dN12dt)st1N1(8)W_{12}=(\frac{dN_{12}}{dt})_{st}\frac{1}{N_1} \tag 8

st表示受激(stimulated){st}表示受激(stimulated)

1.1节相同,(dN12)st(dN_{12})_{st}是单位体积内在dtdt时间元由于受激跃迁引起的,由低能级向高能级跃迁的原子数。受激吸收跃迁与辐射场的关系为:

W12=B12ρν(9)W_{12} = B_{12}\rho_{\nu} \tag 9

注意,该关系式是唯象的。 其中B12B_{12}就是受激吸收跃迁的爱因斯坦系数,只与原子性质有关。所以受激吸收跃迁同时受到原子固有属性和辐射场中能量等于能隙的电磁波态密度的影响。

1.3 受激辐射跃迁

受激吸收跃迁的逆过程就是受激辐射跃迁。在辐射激励下,位于高能级E2E_2的原子也会向低能级E1E_1跃迁,产生和辐射激励相位、方向和频率完全相同的光子,这些光子又去激励更多的高能级原子,通过这种链式反应,我们就得到了具有高度相干性的激光。至于为什么会产生受激辐射跃迁?有一种解释是辐射激励与高能级原子形成偶极子振荡的结果,这个还需要查阅物理性强的资料。 与1.2节同理,我们有如下关系:

W21=(dN21dt)st1N2(10)W_{21} = (\frac{dN_{21}}{dt})_{st}\frac{1}{N_2} \tag {10}

W21=B21ρν(11)W_{21} = B_{21}\rho_{\nu} \tag{11}

其中B21B_{21}为受激辐射跃迁的爱因斯坦系数,只与原子性质有关。

那么,如何建立这三个过程之间的数量联系呢?

1.4 黑体辐射与玻尔兹曼统计

爱因斯坦提出的受激辐射概念结合了普朗克定律和玻尔兹曼统计,在建立爱因斯坦系数之间的数量关系之前,需要先补充黑体辐射和玻尔兹曼统计的相关公式。

描述黑体辐射的普朗克公式:

ρνdν=8πν2dνc3hνehν/kT1(12)\rho_\nu d\nu=\frac{8\pi\nu^2d\nu}{c^3}\frac{h\nu}{e^{h\nu/kT}-1} \tag {12}

其中,单位体积和单位间隔的态密度:

8πν2c3=ρν(13)\frac{8\pi\nu^2}{c^3}=\rho_{\nu} \tag{13}

关于态密度的详细推导,先在这里占个位置

根据统计力学的基本原理,当大量原子在温度TT处处于热平衡状态时,任何两个能级E1E_1E2E_2的相关粒子数一定与玻尔兹曼比值有关,我们有如下关系式:

N2N1=f2f1exp[E2E1kT](14)\frac{N_2}{N_1}=\frac{f_2}{f_1}exp[\frac{E_2-E_1}{kT}] \tag{14}

其中f2,f1f_2,f_1是两个能几个字的统计权重。(统计权重待补充)

若能隙足够大,该比值接近于0。因而在热平衡时,几乎所有原子都位于基能级。典型的如室温下的红宝石晶体,两能级之比N2N1exp(69).\frac{N_2}{N_1}\approx exp(-69).

Alt

1.5 爱因斯坦系数

对于一个空腔黑体,当其处于温度TT时,其热平衡状态应该是以上三种跃迁的结果。腔内的热平衡黑体辐射由普朗克公式给出,腔内物质原子数按照能级分布,应该满足热平衡时的玻尔兹曼分布。

在热平衡中,单位时间内从E2E_2跳到E1E_1的原子数应该和从E1E_1跳到E2E_2的原子数相等。如果我们只考虑E2E_2能级,在热平衡时,原子数的进出数量应该相同,有

dN21dt=dN12dt(15)\frac{dN_{21}}{dt}=\frac{dN_{12}}{dt} \tag{15}

我们知道辐射跃迁包括受激辐射跃迁和自发跃迁两部分:

dN21dt=(dN21dt)sp+(dN21dt)st(16)\frac{dN_{21}}{dt}=(\frac{dN_{21}}{dt})_{sp}+(\frac{dN_{21}}{dt})_{st} \tag{16}

结合公式(5)(10)(11)(5)(10)(11),有

dN21dt=B21ρνN2+A21N2(17)\frac{dN_{21}}{dt}=B_{21}\rho_{\nu}N_2+A_{21}N_2 \tag{17}

由公式(8)(9)(8)(9),有

dN12dt=B12ρνN2(18)\frac{dN_{12}}{dt}=B_{12}\rho_{\nu}N_2 \tag{18}

N2A21+N2B21ρν=N1B12ρν(19)N_2A_{21}+N_2B_{21}\rho_{\nu}=N_1B_{12}\rho_{\nu} \tag {19}

上式和玻尔兹曼分布带入普朗克公式(12)(12),有

c38πhν3(ehνkT1)=B21A21(B12f1B21f2ehνkT1)(20)\frac{c^3}{8\pi h\nu^3}(e^{\frac{h\nu}{kT}}-1)=\frac{B_{21}}{A_{21}}(\frac{B_{12}f_1}{B_{21}f_2}e^{\frac{h\nu}{kT}}-1) \tag{20}

(推导时,注意等式右边为ρν1\rho_{\nu}^{-1}

TT\to\infin时,上式应该仍然成立,于是(等价无穷小量)有:

B12f1=B21f2(21)B_{12}f_1=B_{21}f_2 \tag{21}

把上式代回(20)(20),有

A21B21=8πhν3c3(22)\frac{A_{21}}{B_{21}}=\frac{8\pi h \nu^3}{c^3} \tag{22}

以上两式即为最后导出的爱因斯坦系数基本关系。 如果两统计权重相等,即f1=f2f_1=f_2,还有:

B21=B12(23)B_{21}=B_{12} \tag{23}

W12=W21(24)W_{12} = W_{21} \tag{24}

虽然推导爱因斯坦系数的关系式时,用到了热平衡,但是用量子电动力学的方法依然可以得到相同的结果,然而并不会量子电动力学。