开发者

What is the best way to learn board bringup and hw diagnostics? [closed]

Closed. This question is opinion-based. It is not currently accepting answers.

Wa开发者_Python百科nt to improve this question? Update the question so it can be answered with facts and citations by editing this post.

Closed 8 years ago.

Improve this question

This is my background, I have a Masters in Computer Engineering and most of my work experience involved writing device drivers for various consumer electronics. I have done 8051 and 8086 controller programming as part of my curriculum. I have also done some work on functional validation of Automotive HW. Now I want to move to very low level where it involves flashing the board, powering up, bootloader programming, validating the various components on the board, validating buses, memories etc.


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.


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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜