Python基础知识
实现TPS62873电压配置
1 | import sys |
实现json数据整理到Excel
1 | import os |
实现json数据整理为特定格式的Excel
截取的部分代码
1 | directory_path = str(self.test_result_root/ '..' / '..' / 'report') |
Python3数据分析图表的绘制
1 | import numpy as np |
1 | import sys |
1 | import os |
截取的部分代码
1 | directory_path = str(self.test_result_root/ '..' / '..' / 'report') |
1 | import numpy as np |
GPIO是一种灵活的软件控制数字信号。通用可操作的功能:
在GPIO子系统中,有两种不同的方式来获取和使用gpio:
The descriptor-based interface:gpio操作的首选方式。
The legacy integer-based interface:已弃用(但出于兼容性原因仍然可用),参见:gpio legacy.txt文档
Open Drain:
CMOS CONFIGURATION
||--- out
in ----||
||--+
|
GND
Open Source:
1 | TTL CONFIGURATION |
驱动结构
名称 | 说明 | 备注 |
---|---|---|
devres.c | managed gpio resources | |
gpiolib-devprop.c | Device property helpers for GPIO chips | |
gpiolib-of.c | OF helpers for the GPIO API | |
gpio-syscon.c | YSCON GPIO driver | |
gpiolib-legacy.c | ||
gpiolib-sysfs.c | 入口sys节点的创建 | |
gpio-useri.c | 控制器驱动 | |
gpiolib.c | gpiolib库 | |
gpio-mmio.c | Generic driver for memory-mapped GPIO controllers |
参见文档:
[pinctrl文档]: https://www.kernel.org/doc/html/latest/driver-api/pin-control.html?highlight=pinctrl “文档”
1 | int driver_register(struct device_driver *drv) |
1 | error: cannot convert ‘std::__cxx11::basic_string<char>::iterator’ {aka ‘__gnu_cxx::__normal_iterator<char*, std::__cxx11::basic_string<char> >’} to ‘const char*’ |
问题2:
1 | In file included from ../drivers/media/i2c/useruto/imx390.c:19: |
1 | git rm -r --cache 要忽略的文件 |
使用git log命令查找要修改的commit信息
使用git rebase -i HEAD~N显示要修改的信息, N表示最近的n个commit,结果如下:
1 | pick 27be481ff feat(ne101): SSBSP-998: Create the ne101 project |
注:这里显示pick的顺序是最早的提交显示在上面
这里要不要修改的commit对应的pick改为edit或者e,退出保存。
1 | edit 27be481ff feat(ne101): SSBSP-998: Create the ne101 project |
这里会提示你使用git commit –amend修改信息,改完之后使用git rebase –continue完成
1 | nova2021@nova2021-ThinkStation-K-C2:~/work/ne100_r1$ git rebase -i HEAD~3 |
使用git push命令将修改提交到远端,如果push中提示下列信息,则执行git push -f origin SSBSP-998(不推荐)
1 | git push origin SSBSP-998 |
网上也推荐使用下列操作解决上述问题, 但没有实测
1 | git fetch origin |
1 | git checkout -b dev902 origin/SSBSP-902-merge |
更新代码的修改
git add “修改的文件”
git commit -m “xxxx”
git push origin HEAD:SSBSP-902-merge(在git中,HEAD是一个特殊的指针,它通常指向当前检出的分支的最新提交。HEAD可以被视为一个移动的标签,它始终指向当前所在的提交)
fps = frames per second
bpp = bits per pixel
1 | MIPI_CLK x LANE_CNT = PCLK x BPP |
例如:24-bit RGB, 4 lanes, 1GHz Mipi clock, 则PCLK为166.667MHz
备注:GMSL1模式下PCLK限制到150MHz
0x01–>FSYNC_ERR_FLAG
[BIT1] :REM_ERR_FLAG: Receives remote side error status (inverse of remote side ERRB pin level)
[BIT0] :FSYNC_ERR_FLAG: Frame Sync Error Flag, FSYNC_ERR_CNT(00x4b0) >= FSYNC_ERR_THR(0x4B1)
重点:关注此寄存器,监测mipi数据状态(0x62)
[BIT7] :VID_BLK_LEN_ERR: Video Rx block length error detected
[BIT6] :VID_LOCK: Video pipeline locked 0b0: video pipeline not locked 0b1:video pipeline locked
[BIT5] :VID_PKT_EDT: Video Rx sufficient packet throughput detection 0b0: insufficient packet throughput 0b1: Sufficient packer throughput
[BIT4] : VID_SEQ_ERR: Video Rx sequence error detection. 0b0: No video Rx sequence error detected 0b1: Video Rx sequence error detected
重点:此寄存器监测video channel的lock状态(0x81)
[BIT 0] :VIDEO_LOCK: Video channel is locker and outputing vailid video data. 0b0: Video channel is not locked 0b1: Video channel is locked.
[BIT7] :CSIPLL3_LOCK: CSIPLL3 lock 0b0: PLL not locked 0b1: PLL locked
[BIT6] :CSIPLL2_LOCK: CSIPLL2 lock 0b0: PLL not locked 0b1: PLL locked
[BIT5] :CSIPLL1_LOCK: CSIPLL1 lock 0b0: PLL not locked 0b1: PLL locked
[BIT4] :CSIPLL2_LOCK: CSIPLL0 lock 0b0: CSI2 0 PLL not locked 0b1: CSI2 0 PLL locked
[BIT0] :BACKTOP_EN: Backtop write logic enable.
[BIT7] :cmd_overflow3: Pipe 3 command FIFO overflow
[BIT6] :cmd_overflow2: Pipe 2 command FIFO overflow
[BIT5] :cmd_overflow1: Pipe 1 command FIFO overflow
[BIT4] :cmd_overflow0: Pipe 0 command FIFO overflow
[BIT3] :LMO_3: Pipe 3 line memory overflow sticky register
[BIT2] :LMO_3: Pipe 2 line memory overflow sticky register
[BIT1] :LMO_3: Pipe 1 line memory overflow sticky register
[BIT0] :LMO_3: Pipe 0 line memory overflow sticky register
备注:该寄存器正常出头的过程中也存在overflow。
[BIT7] :cmd_overflow7: Pipe 7 command FIFO overflow
[BIT6] :cmd_overflow6: Pipe 6 command FIFO overflow
[BIT5] :cmd_overflow5: Pipe 5 command FIFO overflow
[BIT4] :cmd_overflow4: Pipe 4 command FIFO overflow
[BIT3] :LMO_7: Pipe 7 line memory overflow sticky register
[BIT2] :LMO_6: Pipe 6 line memory overflow sticky register
[BIT1] :LMO_5: Pipe 5 line memory overflow sticky register
[BIT0] :LMO_4: Pipe 4 line memory overflow sticky register
[BIT7] :mem_err7: Pipe 7 line memory error
[BIT6] :mem_err6: Pipe 6 line memory error
[BIT5] :mem_err5: Pipe 5 line memory error
[BIT4] :mem_err4: Pipe 4 line memory error
[BIT3] :mem_err3: Pipe 3 line memory error
[BIT2] :mem_err2: Pipe 2 line memory error
[BIT1] :mem_err1: Pipe 1 line memory error
[BIT0] :mem_err0: Pipe 0 line memory error
[BIT7] :FSYNC_LOSS_OF_LOCK: Frame Synchronization Lost Lock
[BIT6] :FSYNC_LOCKED: Frame Synchronization Lock
[BIT7:0] : STATUS: MIPI Tx Status Register
– 0bxxxxxxx0: SYNC mode disabled
– 0bxxxxxxx1: SYNC mode enable
– 0bxxxxxx0x: Video channels not in-sync
– 0bxxxxxx1x: Video channels in-sync
– 0bxxxxx0xx: No loss of video sync
– 0bxxxxx1xx: Video sync lost after last read of this register or reset
备注:正常多个相机拼图同步,该寄存器的值为0x03, 自我感觉的低两位必须置位。
[BIT7:4] :csi2_tx1_pkt_cnt: Packer count of CSI2 Controller 1
[BIT3:0] :csi2_tx1_pkt_cnt: Packer count of CSI2 Controller 0
– 0bxxx1: PHY copy 0 FIFO overflow
– 0bxx1x: PHY copy 0 FIFO underflow
– 0bx1xx: PHY copy 1 FIFO overflow
– 0b1xxx: PHY copy 1 FIFO underflow
[BIT7:4] :csi2_tx1_pkt_cnt: Packer count of CSI2 Controller 3
[BIT3:0] :csi2_tx1_pkt_cnt: Packer count of CSI2 Controller 2
– 0bxxx1: PHY copy 0 FIFO overflow
– 0bxx1x: PHY copy 0 FIFO underflow
– 0bx1xx: PHY copy 1 FIFO overflow
– 0b1xxx: PHY copy 1 FIFO underflow
[BIT7:4] :phy1_pkt_cnt: Packet count of MIPI PHY1
[BIT3:0] :phy0_pkt_cnt: Packet count of MIPI PHY0
– 0bxxx1: PHY copy 0 FIFO overflow
– 0bxx1x: PHY copy 0 FIFO underflow
– 0bx1xx: PHY copy 1 FIFO overflow
– 0b1xxx: PHY copy 1 FIFO underflow
[BIT7:4] :phy1_pkt_cnt: Packet count of MIPI PHY1
[BIT3:0] :phy0_pkt_cnt: Packet count of MIPI PHY0
– 0bxxx1: PHY copy 0 FIFO overflow
– 0bxx1x: PHY copy 0 FIFO underflow
– 0bx1xx: PHY copy 1 FIFO overflow
– 0b1xxx: PHY copy 1 FIFO underflow
备注:正常出图也会存在ecc错误。
备注:正常出图也会存在copy FIFO overflow
如果外接一个相机,则只配置对应那一路的gpio(0xb08, 0xc08, 0xd08, 0xe08),否则多配或少配都会导致加串配置失败。
1 | 0x04 0x29 0x03 0x04 0x61 |
问题1:在调试外部出发2wh模式的时候,GMSLA, GMSLB两路拼图是正常的,但是GMSLC, GMSLD两路拼图,刚开始图像是实时正常,但是几秒钟后图像变为下图的样子并卡死,没有数据流。
外部触发寄存器配置如下:
1 | 0x04 0x29 0x04 0xa0 0x08 |
解决办法:更新几个寄存器的配置如下,外触发相机正常出图:
1 | 0x04 0x29 0x04 0xa0 0x08 |
问题2:2个8m相机拼图,有一个相机的图像被拆分并对掉,图像实时
问题3:这个是因为配置0x41a寄存器为0xf0导致的问题
问题3: 分辨率不匹配的问题
原因是分倍率没有配置正确导致,实际分倍率是1280x960, 错误配置成为1288x968
问题4:配置MIPI的速率低导致图像异常
解决办法:调高MIPI每个lane的传输速率,解决问题。
基于max96712格式raw12相机调试
1 | 0x03 0x28 0x01 0x10 |
raw格式的图像
max96712的4wh模式图像先后顺序可配
1 | 通过配置 |
Gstreamer命令采图
文件存盘
1 | filename1=video1_$(date +%Y%m%d)_$(date +%H%M%S).yuv |
hdmi预览
1 | gst-launch-1.0 v4l2src device=/dev/video$1 ! "video/x-raw,format=UYVY,width=$2,height=$3,framerate=30/1" ! xvimagesink -ev sync=false |
ffplay播放视频
1 | ffplay -video_size 7680x1080 -autoexit -pix_fmt yuv422p camera.yuv |
调试2个2WH模式的相机问题。
1.
1 | newtio.c_cflag |= PARENB; |
1 | newtio.c_iflag |= (INPCK | ISTRIP); |
1 | newtio.c_cflag &= ~PARENB; |
1 | newtio.c_cflag &= ~CSTOPB; |
1 | newtio.c_cflag |= CSTOPB; |
1 | int UART_Open(int fd,char* port) |
1 | import subprocess |
参考: https://www.cnblogs.com/du-z/p/15322745.html
示例:file=”/dir1/dir2/dir3/my.file.txt”
1 | ${file#*/}:删掉第一个/ 及其左边的字符串:dir1/dir2/dir3/my.file.txt |
1 | ${file##*/}:删掉最后一个/ 及其左边的字符串:my.file.txt |
1 | ${file%/*}:删掉最后一个 / 及其右边的字符串:/dir1/dir2/dir3 |
1 | ${file:5:5}:提取第5 个字节右边的连续5个字节:/dir2 |
1 | echo ${#file} |
1 | ${file/dir/path}:将第一个dir 替换为path:/path1/dir2/dir3/my.file.txt |
1 | echo "2024-03-13_144312-1302944-gpio_001_pass.tar.gz" | rev | awk -F'-' '{print $1}' | rev |
1 | find -name "*failure*" | rev | awk -F'-' '{print $1}' | rev | awk -F'_' '{print $1"_"$2}' | sort |
1 | find -name "*failure*" | rev | awk -F'-' '{print $1}' | rev | awk -F'_' '{print $1"_"$2}' | sort | uniq -c |
1 | sudo apt-get install can-utils |
1 | sudo modprobe vcan |
1 | sudo ip link add dev vcan0 type vcan |
1 | ifconfig -a |
1 | ip link set can0 type can --help 4.ip link set can0 up type can bitrate 800000 |
1 | ip link set can0 up type can bitrate 800000 loopback on |
1 | ip link set can0 down |
1 | cansend can0 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88 |
1 | cansend can0 -i 0x800 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88 -e -e 表示扩展帧,CAN_ID最大29bit,标准帧CAN_ID最大11bit -i表示CAN_ID |
1 | cansend can0 -i 0x02 0x11 0x12 --loop=20 --loop 表示发送20个包 |
1 | candump can0 接收CAN0数据 |