First you need a good understanding of electronics, an EE degree helps but is not necessarily required, depends on the market you are going into.
You definitely need strong schematic reading skills, good schematics and bad ones.
You definitely need strong datasheet and other reference manual skills. Most of these manuals have mistakes so you need some hacking skills as well. Never trust the manual, never write hundreds or thousands of lines of code without testing against the hardware. One step at a time. Some vendors have good docs, some are horrible, surf sparkfun and places like digikey and mouser to get datasheets on various things from different vendors.
tons of stuff at sparkfun.com, arm based, avr based, msp430 based, etc, etc. These of course are all tested boards, but can teach you how they boot, how to read schematics and datasheets (programmers reference manuals, etc) and from that how to program the devices to make them perform.
ability to read verilog and vhdl, ability to write it is even better. the "real" documentation for a design is the source code itself.
ability to operate an oscilloscope. Probably your number one debug tool both for figuring out why something didnt come up and developing test software and debugging your software.
develop a strong knowledge for often used interfaces. spi, i2c, mdio, serial, etc. Ideally you should be able to put a few scope probes on a spi bus and read the commands and responses.
be able to write code to bit bang any of the above busses, controlling the timing so that you do not exceed the I/O speed capabilties of any of the parts involved.
Basic ethernet protocols and tools like wireshark or other similar ones. if there is ethernet on board you will need to bring that interface up, receive some data, dump it out be able to parse through the bytes and see the packets. Be able to generate simple packets, arp, ping, udp.
read up on the fat file system. sd card and other similar interfaces use this.
learn usb.
learn pci/pcie.
dram
stellaris boards from ti are loaded with peripherals to try to figure out how to talk to .
get the beagleboard schematics or the open-rd or plug computer schematics and research all the major components, the dram the flash, sata, ethernet, usb, etc.
Oh, right definitely learn how to program eeproms and flashes, eeproms are dying out but were unfortunately more consistent with each other. flash parts, spi, parallel, plus every microcontroller has a custom interface, are wide ranging.
defintely get used to using jtag. openocd is good, the ftdi serial breakout boards at sparkfun can be used to bit bang jtag, or pretty much anything else. amontek makes the jtag-tiny which is good for arm or for repurposing for other platforms. I think the lattice programmer can be repurposed as well. speaking of...understanding the different ways fpgas can be programmed and booted. Likewise how to program an fpga by bitbanging some gpio interface, often the fpga vendor will have a skeleton (svf player for example) and you have to provide the backend, not unlike putting a backend on openocd. Some microcontroller families have non-jtag, usually serial, interfaces that can be used as an alternative way to load/program the chip.
look up, learn about pwm, pulse width modulation.
study vpi and other ways to connect test software with hardware/hdl under simulation, great benefits can come from testing and writing test software for the chip/logic before it is on a board.
know what a clock looks like when there is too much capacitance, or resitance, or not enough of each (ringing). know what crosstalk looks like.
being able to solder helps. after about the third time in an hour a flash has to be unsoldered because you keep making software mistakes and bricking the board, its like the boy who cried wolf, you wont get much help.
ad hoc programming, the faster you can whip up a program/tool the more things you can get done in a day.
That reminds me you have to have excellent discipline and patience. Only change one thing at a time when testing/debugging, it can take an eternity to work through all the things that can be wrong, one thing at a time, take a logical path. divide the problem in half again and again until you find the cause. documenting and storing everything you can, and being able to recall the relevant information from that collection of data and present it. get it right the first time. boards are easy to brick, and the pads can only handle being reworked so many times before the board is scrap. the easiest solution is do not make mistakes. being able to create tests and test fixtures that reduce human error causing failures. If you cannot manage your own human error doing your job how are you going to reduce the human error related to production testing? Having the ability and courage to defend and demonstrate your belief in what the problem/solution/test method is. For example here is how to make the next card non-brickable, how much it will cost per board, and how much it will save in development time to offset that cost.
Your question is too wide open, the answer to your open ended question is you need to learn everything that can be on or connected to a pcboard. you need to be able to program at the lowest level comfortably. so fully understand every datasheet at digikey, mouser, etc. be able to program every one of those parts, all compilers, etc. if you narrow the question down some we can give a more digestible answer.
Really, your question is quite broad and there are many ways to approach learning these things, but this is the direction I came from originally and it has worked well for me.
发布评论
评论(2)
首先,您需要对电子产品有很好的了解,电子工程学位会有所帮助,但不是必需的,取决于您要进入的市场。
你肯定需要很强的原理图阅读能力,好的原理图和坏的原理图。
您肯定需要强大的数据表和其他参考手册技能。这些手册大多数都有错误,因此您还需要一些黑客技能。永远不要相信手册,永远不要在没有针对硬件进行测试的情况下编写数百或数千行代码。一次一步。有些供应商有很好的文档,有些则很糟糕,可以在sparkfun 以及digikey 和mouser 等地方获取来自不同供应商的各种产品的数据表。
在sparkfun.com上有很多东西,基于arm的,基于avr的,基于msp430的,等等。这些当然都是经过测试的板,但可以教你它们如何启动,如何阅读原理图和数据表(程序员参考手册等)以及如何对设备进行编程以使它们正常工作。
能够读取verilog和vhdl,能够编写它就更好了。设计的“真正”文档是源代码本身。
操作示波器的能力。可能是您的首选调试工具,既可以用于找出未出现问题的原因,也可以用于开发测试软件和调试软件。
对常用界面有深入的了解。 spi、i2c、mdio、串行等。理想情况下,您应该能够在 spi 总线上放置一些示波器探针并读取命令和响应。
能够编写代码对上述任何总线进行位操作,控制时序,这样就不会超出任何所涉及部件的 I/O 速度能力。
基本的以太网协议和工具,如wireshark或其他类似的工具。如果船上有以太网,您将需要启动该接口,接收一些数据,将其转储出来,以便能够解析字节并查看数据包。能够生成简单的数据包、arp、ping、udp。
阅读 fat 文件系统。 sd卡和其他类似的接口都使用这个。
学习USB。
学习 PCI/PCIE。
ti 的dram
stellaris 板装载了外围设备,以尝试弄清楚如何与之通信。
获取 beagleboard 原理图或 open-rd 或插头计算机原理图并研究所有主要组件、DRAM、闪存、SATA、以太网、USB 等。
哦,对了,一定要学习如何对 eeproms 和闪存进行编程,eeproms 正在消失,但是不幸的是,彼此更加一致。 flash部分,spi,并行,加上每个微控制器都有一个自定义接口,范围很广。
一定会习惯使用jtag。 openocd 很好,sparkfun 的 ftdi 串行分线板可用于 bit bang jtag 或几乎其他任何东西。 amontek 制造了 jtag-tiny,适用于 ARM 或重新用于其他平台。我认为格子程序员也可以改变用途。说到...了解 FPGA 编程和启动的不同方式。同样,如何通过 bitbanging 某些 GPIO 接口来对 fpga 进行编程,fpga 供应商通常会有一个框架(例如 svf 播放器),并且您必须提供后端,这与将后端放在 openocd 上不同。一些微控制器系列具有非 jtag(通常是串行)接口,可用作加载/编程芯片的替代方式。
查一下,了解pwm,脉宽调制。
研究 vpi 和其他在模拟下连接测试软件与硬件/HDL 的方法,在芯片/逻辑安装到电路板上之前对其进行测试和编写测试软件可以带来巨大的好处。
了解当电容或电阻太大或电容或电阻不足(振铃)时时钟会是什么样子。知道串扰是什么样子的。
能够焊接会有所帮助。大约一个小时内第三次必须拆焊闪存,因为您不断犯软件错误并使电路板变砖,就像喊狼来了的男孩一样,您不会得到太多帮助。
即席编程,您可以越快地编写程序/工具,一天内可以完成的事情就越多。
这提醒我你必须有良好的纪律和耐心。测试/调试时一次只改变一件事,可能需要很长时间才能解决所有可能错误的事情,一次只改变一件事,采取逻辑路径。一次又一次地将问题分成两半,直到找到原因。尽可能记录和存储所有内容,并能够从数据集中回忆相关信息并将其呈现出来。第一次就做对。电路板很容易变砖,而且焊盘只能承受多次返工,然后电路板就会报废。最简单的解决办法就是不要犯错误。能够创建测试和测试装置,以减少导致故障的人为错误。如果您在工作中无法管理自己的人为错误,您将如何减少与生产测试相关的人为错误?有能力和勇气捍卫并证明您对问题/解决方案/测试方法的信念。例如,这里介绍了如何使下一张卡不易变砖,每块板的成本是多少,以及将节省多少开发时间来抵消该成本。
你的问题太开放了,你的开放式问题的答案是你需要学习可以在印刷电路板上或连接到印刷电路板的所有内容。您需要能够轻松地在最低级别进行编程。因此,充分理解 digikey、mouser 等的每个数据表。能够对每个部分、所有编译器等进行编程。如果您缩小问题范围,我们可以给出更容易理解的答案。
First you need a good understanding of electronics, an EE degree helps but is not necessarily required, depends on the market you are going into.
You definitely need strong schematic reading skills, good schematics and bad ones.
You definitely need strong datasheet and other reference manual skills. Most of these manuals have mistakes so you need some hacking skills as well. Never trust the manual, never write hundreds or thousands of lines of code without testing against the hardware. One step at a time. Some vendors have good docs, some are horrible, surf sparkfun and places like digikey and mouser to get datasheets on various things from different vendors.
tons of stuff at sparkfun.com, arm based, avr based, msp430 based, etc, etc. These of course are all tested boards, but can teach you how they boot, how to read schematics and datasheets (programmers reference manuals, etc) and from that how to program the devices to make them perform.
ability to read verilog and vhdl, ability to write it is even better. the "real" documentation for a design is the source code itself.
ability to operate an oscilloscope. Probably your number one debug tool both for figuring out why something didnt come up and developing test software and debugging your software.
develop a strong knowledge for often used interfaces. spi, i2c, mdio, serial, etc. Ideally you should be able to put a few scope probes on a spi bus and read the commands and responses.
be able to write code to bit bang any of the above busses, controlling the timing so that you do not exceed the I/O speed capabilties of any of the parts involved.
Basic ethernet protocols and tools like wireshark or other similar ones. if there is ethernet on board you will need to bring that interface up, receive some data, dump it out be able to parse through the bytes and see the packets. Be able to generate simple packets, arp, ping, udp.
read up on the fat file system. sd card and other similar interfaces use this.
learn usb.
learn pci/pcie.
dram
stellaris boards from ti are loaded with peripherals to try to figure out how to talk to .
get the beagleboard schematics or the open-rd or plug computer schematics and research all the major components, the dram the flash, sata, ethernet, usb, etc.
Oh, right definitely learn how to program eeproms and flashes, eeproms are dying out but were unfortunately more consistent with each other. flash parts, spi, parallel, plus every microcontroller has a custom interface, are wide ranging.
defintely get used to using jtag. openocd is good, the ftdi serial breakout boards at sparkfun can be used to bit bang jtag, or pretty much anything else. amontek makes the jtag-tiny which is good for arm or for repurposing for other platforms. I think the lattice programmer can be repurposed as well. speaking of...understanding the different ways fpgas can be programmed and booted. Likewise how to program an fpga by bitbanging some gpio interface, often the fpga vendor will have a skeleton (svf player for example) and you have to provide the backend, not unlike putting a backend on openocd. Some microcontroller families have non-jtag, usually serial, interfaces that can be used as an alternative way to load/program the chip.
look up, learn about pwm, pulse width modulation.
study vpi and other ways to connect test software with hardware/hdl under simulation, great benefits can come from testing and writing test software for the chip/logic before it is on a board.
know what a clock looks like when there is too much capacitance, or resitance, or not enough of each (ringing). know what crosstalk looks like.
being able to solder helps. after about the third time in an hour a flash has to be unsoldered because you keep making software mistakes and bricking the board, its like the boy who cried wolf, you wont get much help.
ad hoc programming, the faster you can whip up a program/tool the more things you can get done in a day.
That reminds me you have to have excellent discipline and patience. Only change one thing at a time when testing/debugging, it can take an eternity to work through all the things that can be wrong, one thing at a time, take a logical path. divide the problem in half again and again until you find the cause. documenting and storing everything you can, and being able to recall the relevant information from that collection of data and present it. get it right the first time. boards are easy to brick, and the pads can only handle being reworked so many times before the board is scrap. the easiest solution is do not make mistakes. being able to create tests and test fixtures that reduce human error causing failures. If you cannot manage your own human error doing your job how are you going to reduce the human error related to production testing? Having the ability and courage to defend and demonstrate your belief in what the problem/solution/test method is. For example here is how to make the next card non-brickable, how much it will cost per board, and how much it will save in development time to offset that cost.
Your question is too wide open, the answer to your open ended question is you need to learn everything that can be on or connected to a pcboard. you need to be able to program at the lowest level comfortably. so fully understand every datasheet at digikey, mouser, etc. be able to program every one of those parts, all compilers, etc. if you narrow the question down some we can give a more digestible answer.
学习使用微控制器的嵌入式系统设计将教您如何设计电路板并启动它。尝试 http://www.avrfreaks.net/ 来了解一些使用 Atmel AVR 的项目。还有 http://www.sixca.com/、http://www.eevblog.com/ 和 http://www.webring.org/hub/avr
真的,你的问题相当广泛,有很多方法可以学习这些东西,但这是我最初的方向这对我来说效果很好。
Learning embedded systems design with microcontrollers will teach you how to design a board and bring it up. Try http://www.avrfreaks.net/ for some projects with Atmel AVRs. There's also http://www.sixca.com/, http://www.eevblog.com/, and http://www.webring.org/hub/avr
Really, your question is quite broad and there are many ways to approach learning these things, but this is the direction I came from originally and it has worked well for me.